我最近尝试进入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"是castror内部的属性&ValidationError,根据使用Mongoose包时发生的错误而抛出。
在迁移到Mongoose v4之前,"类型"属性被用来识别发生了什么类型的CastError或ValidationError。然而,这与使用Error的V8 JavaScript引擎相冲突。在内部键入属性。
仍然没有在Mongoose文档中找到很多关于我们可以从"kind"中获得什么样的可能值的信息。属性,但至少我们知道它来自哪里,下面的发布说明解释了它为什么被制作。
https://mongoosejs.com/docs/migration.html casterror-and-validationerror-now-use-kind-instead-of-type-to-report-error-types