如何解决MERN stack err.kind 表达:它来自哪里?
我最近正在尝试进入 MERN 堆栈开发,我在教程中看到一个错误处理表达式被用于识别正在抛出的错误类型。到目前为止,我已经看到,可以使用以下表达式,并且它们似乎使用标准 js 库。
err.name === "example"
err.message.indexOf('Cast to ObjectId failed') !== -1
err.message instanceof mongoose.Error.CastError
但后来我看到了这种处理错误的方式,它使用了“error.kind”属性。我四处寻找它的来源以及我应该从它那里获得什么样的价值观,但没有成功。
希望您能对以下问题有所了解:
- “error.kind”来自哪个库?它来自标准的 JS 代码库吗?
- 它来自猫鼬吗?节点?快递?
在这个阶段我显然仍然很困惑,很高兴阅读你推荐的任何阅读材料。
router.get('/user/:user_id',async (req,res)=>{
try {
const profile = await Profile.findOne({user:req.params.user_id}).populate('User',['name','avatar']);
if(!profile){
return res.status(400).json({msg:'There is no profile for the user'});
}
res.json(profile);
} catch (err) {
console.log(err.message);
if(err.kind == 'ObjectId'){
return res.status(400).json({msg:'There is no profile for the user'});
}
res.status(500).json({msg:'Server Error'});
}
});
解决方法
想通了!现在我对不同的 JS 组件如何在 MERN 堆栈中工作有了更多的了解。
“kind”是 CastError 和 ValidationError 中的一个属性,根据使用 Mongoose 包时发生的错误而抛出。
在迁移到 Mongoose v4 之前,使用“type”属性来识别发生的 CastError 或 ValidationError 的类型。但是,这与在内部使用 Error.type 属性的 V8 JavaScript 引擎相冲突。
仍然没有在 Mongoose 文档中找到太多关于我们可以从“kind”属性获得什么样的可能值的信息,但至少我们知道它来自哪里,下面的发行说明解释了它为什么被制作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。