Информация о сообщениях REST не получена с multipart/form-data

Используя Restify и Mongoose, я создал базовый REST API. Все работает нормально, пока я отправляю содержимое JSON с application/json в качестве содержимого.

Но теперь мне нужно отправить изображение вместе с контентом, поэтому я переключился на multipart/form-data для определенного маршрута. И, похоже, он вообще не получает контента.

Вот базовая настройка, отправленная в мой API с помощью Insomnia:

Контент с бессонницей

Довольно просто. На данный момент для модели Mongodb требуются только filename и url (я займусь самим файлом, как только это заработает).

И вот что я получаю в ответ от сервера:

{
  "code": "Internal",
  "message": "Media validation failed: url: Path `url` is required., filename: Path `filename` is required."
}

Таким образом, он говорит, что не получил ни одного содержимого полей.

Временная шкала показывает, что поля были отправлены:

> POST /medias HTTP/1.1
> Host: localhost:3030
> User-Agent: insomnia/6.0.2
> Content-Type: multipart/form-data; boundary=X-INSOMNIA-BOUNDARY
> Accept: */*
> Content-Length: 221
| --X-INSOMNIA-BOUNDARY
| Content-Disposition: form-data; name="filename"
| test.jpg
| --X-INSOMNIA-BOUNDARY
| Content-Disposition: form-data; name="url"
| https://images.test.com/test.jpg
| --X-INSOMNIA-BOUNDARY--
* We are completely uploaded and fine
< HTTP/1.1 500 Internal Server Error
< Server: TestServer
< Content-Type: application/json
< Content-Length: 125
< Connection: Keep-Alive
< Content-MD5: KI89enLnYv9oMJxg5k4MXA==
< Date: Sun, 12 Aug 2018 22:50:31 GMT
< Request-Id: b20babc1-9f1b-466b-af7c-13d385cd8023
< Response-Time: 6
* Received 125 B chunk
* Connection #65 to host localhost left intact

Вот моя функция:

server.post('/medias', (req, res, next) => {
  if (!req.is('multipart/form-data')) {
    return next(
      new errors.InvalidContentError(`Expects 'multipart/form-data'`)
    )
  }

  let data = req.body || {}

  let media = new Media(data)
  media.save((err) => {
    if (err) {
      return next(new errors.InternalError(err.message))
      next()
    }

    res.send(201)
    next()
  })
})

console.log на req.body показывает, что он пуст. Я утешил сам req, чтобы узнать, можно ли хранить данные где-нибудь еще, но ничего не нашел.

Что я здесь пропустил? Заранее спасибо.


person EmmanuelBeziat    schedule 12.08.2018    source источник


Ответы (1)


Ну, наконец-то я получил его с кодировкой base64.

person EmmanuelBeziat    schedule 22.11.2018