【问题标题】:How to fix the POST "ValidationError" if the validation is supposed to be ok?如果验证应该没问题,如何修复 POST “ValidationError”?
【发布时间】:2019-08-19 03:31:22
【问题描述】:

我正在制作一个送货应用。 当我尝试在 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.",

所以基本上,我的请求都没有通过。我环顾四周,根据我在这里和谷歌上以前的答案中找到的内容,我的猫鼬模型和我的路线文件似乎都很好。 这是“收件人”模型中的 sn-p:

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
      }
    }
  }

这是路由文件中的 sn-p:

    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;

我猜我设置路径的方式是错误的,但我是根据谷歌搜索发现的并在这里探索其他问题来做的。

提前致谢!

编辑

This is what I'm trying to pass in Postman

另外,当我把上面的sn-p从路由文件改成:

    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;

我得到一个不同的错误: 2nd Postman screenshot

【问题讨论】:

  • 您的 POST 请求可能有问题。您能否编辑您的问题并添加您发送的具体内容?
  • @MrMister 我添加了我要发送的内容

标签: node.js validation express mongoose mongoose-schema


【解决方案1】:

有文档齐全的软件包可用,Express 验证器非常容易实现。您不需要在函数内部创建大的 if 条件。 请关注this链接。

【讨论】:

  • 感谢您的回复。但是,我的验证不是问题。验证正在运行,这就是我出现此错误的原因。该请求没有传递数据,所以我几乎 100% 确定我的错误在于我提供的路由文件中的 sn-p。我只是看不出其中有什么问题。
【解决方案2】:

您似乎应该使用分层主体传递请求,而不是平展字段。 recipient 模型描述了一个 recLocation,它有 5 个必填字段,而您确实提供了它们 - 但在错误的地方。

尝试发布同样描述该位置的 JSON 请求:

recLocation: {
   reqCity: "..."
   reqStreet: "..."
   ...
}

【讨论】:

  • 谢谢!删除了模型中的收件人,只留下了 recLocation 并且它可以工作。下面是 JSON 请求成功的截图:prnt.sc/n445e1
猜你喜欢
  • 2019-09-20
  • 1970-01-01
  • 2021-03-31
  • 2017-07-24
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多