Как исправить POST «ValidationError», если проверка должна быть в порядке? - PullRequest
0 голосов
/ 28 марта 2019

Я делаю приложение доставки.Когда я пытаюсь отправить запрос заказа в Postman со всеми необходимыми данными, я получаю следующую ошибку для каждого объекта:

"message": "order validation failed: recipient.recLocation.recPhone: Path `recipient.recLocation.recPhone` is required., recipient.recLocation.recZipcode: Path `recipient.recLocation.recZipcode` is required., recipient.recLocation.recStreetnumber: Path `recipient.recLocation.recStreetnumber` is required., recipient.recLocation.recStreet: Path `recipient.recLocation.recStreet` is required., recipient.recLocation.recCity: Path `recipient.recLocation.recCity` is required., recipient.recName: Path `recipient.recName` is required.",

Таким образом, в основном, ни один из моих запросов не проходит.Я огляделся и согласно тому, что я нашел в предыдущих ответах здесь и в Google, и моя модель Мангуста, и мой файл маршрута, кажется, в порядке.Вот фрагмент из модели для «получателя»:

recipient: {
    //rec in front of field names stands for "recipient" - done so that the data of recipient doesn't get confused for the data of the sender
    recName: {
      type: String,
      required: true
    },
    recLocation: {
      recCity: {
        type: String,
        required: true,
        max: 32
      },
      recStreet: {
        type: String,
        required: true,
        max: 32
      },
      recStreetnumber: {
        type: String,
        required: true,
        max: 16
      },
      recZipcode: {
        type: String,
        required: true,
        max: 16
      },
      recPhone: {
        type: String,
        required: true,
        max: 32
      }
    }
  }

А вот фрагмент из файла маршрутизации:

    const orderFields = {};
    orderFields.user = req.user.id;
    if (req.body.description) orderFields.description = req.body.description;
    if (req.body.status) orderFields.status = req.body.status;
    //recipient
    orderFields.recipient = {};
    if (req.body.recName) orderFields.recipient.recName = req.body.recName;
    if (req.body.recCity) orderFields.recipient.recCity = req.body.recCity;
    if (req.body.recStreet)
      orderFields.recipient.recStreet = req.body.recStreet;
    if (req.body.recStreetnumber)
      orderFields.recipient.recStreetnumber = req.body.recStreetnumber;
    if (req.body.recZipcode)
      orderFields.recipient.recZipcode = req.body.recZipcode;
    if (req.body.recPhone) orderFields.recipient.recPhone = req.body.recPhone;

Я предполагаю, что мой способ определения пути неверен, но я сделал это в соответствии с тем, что нашел Гуглинг, и исследовал другие вопросы здесь.

Заранее спасибо!

РЕДАКТИРОВАТЬ

Это то, что я пытаюсь передать в Почтальоне

Кроме того, когда я изменяю вышефрагмент из файла маршрутизации по адресу:

    orderFields.recipient = {};
    if (req.body.recName) orderFields.recipient.recName = req.body.recName;
    if (req.body.recCity)
      orderFields.recipient.recLocation.recCity = req.body.recCity;
    if (req.body.recStreet)
      orderFields.recipient.recLocation.recStreet = req.body.recStreet;
    if (req.body.recStreetnumber)
      orderFields.recipient.recLocation.recStreetnumber =
        req.body.recStreetnumber;
    if (req.body.recZipcode)
      orderFields.recipient.recLocation.recZipcode = req.body.recZipcode;
    if (req.body.recPhone)
      orderFields.recipient.recLocation.recPhone = req.body.recPhone;

Я получаю другую ошибку: 2-й скриншот почтальона

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Кажется, что вы должны передать запрос с иерархическим телом, а не выровнять поля. Модель recipient описывает recLocation, который имеет 5 обязательных полей, и вы действительно предоставляете их, но не в том месте.

Попробуйте опубликовать JSON-запрос, который также отображает местоположение:

recLocation: {
   reqCity: "..."
   reqStreet: "..."
   ...
}
0 голосов
/ 28 марта 2019

Доступны хорошо документированные пакеты, Экспресс валидатор очень прост в реализации.Вам не нужно создавать большое условие if внутри функции.Пожалуйста, следуйте этой ссылке.

...