【问题标题】:Joi is throwing error while validating mongoose object -Joi 在验证 mongoose 对象时抛出错误 -
【发布时间】:2020-06-14 04:42:41
【问题描述】:

当我创建一个 Contact 类型的对象(它是 MongoDB 模式的模型)时,它会抛出一些奇怪的错误,如下所示。我使用 Joi 的目的是进行客户端验证,也就是传入请求。

这里的auth是一个验证jwt并从jwt中取出id的中间件。

它显示出奇怪的错误,例如 - **"$__" is not allowed。不允许使用“isNew”。 “错误”是不允许的。不允许使用“_doc”。不允许使用“$locals”。不允许使用 "$op" **

router.post('/',auth,async (req,res)=>{
try{
// console.log(`contact - ${JSON.stringify(req.body)}`);
let contact = new Contact({
  firstName : req.body.firstName,
  lastName : req.body.lastName,
  email : req.body.email,
  address : req.body.address,
  country : req.body.country,
  isBookMark : req.body.isBookMark,
});
// console.log(`before contact - ${JSON.stringify(contact)}`);
// // contact = {...req.body};
// console.log(`before after - ${JSON.stringify(contact)}`);
contact.userID=req.user.id;
// ?console.log(`contact - ${(contact)}`);

const {error} = validateContact(contact);
console.log(`ERROR - ${error}`);
}
 catch(error){
console.log(`contacts - ${error.message}`);
}

【问题讨论】:

  • 能否将您的代码发布为文本而不是图像?能帮到你就好多了。谢谢!

标签: javascript node.js mongodb express


【解决方案1】:

问题是您正在尝试验证具有自己内部属性的猫鼬模式类。这就是您在错误中看到的内容。这里有两个选择

  • req.body 传递给您的验证函数,而不是传递联系人对象。

  • 或从联系人架构中提取属性并将该对象传递给验证函数。

希望对您有所帮助。

【讨论】:

  • 同意并且也有意义......这肯定会解决问题,但内部是什么导致了问题?非常感谢您的回答 :) 以及我尝试使用 @ 运算符时如何标记此人的任何想法,但我想它没有成功
  • 当我这样做时,它不会显示错误,这就是你的第二点是对的吗?让联系人 = 新联系人();联系人 = {...req.body};联系人.userID=req.user.id;常量 {error} = validateContact(contact); console.log(ERROR - ${error}) 那么就没有报错了。
猜你喜欢
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 2017-08-05
  • 2018-05-31
  • 2018-11-30
  • 1970-01-01
  • 2020-04-18
相关资源
最近更新 更多