#javascript #node.js #express #mongoose #mern
#javascript #node.js #выразить #мангуст #mern
Вопрос:
В последнее время я пытаюсь заняться разработкой стека 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'});
}
});
Ответ №1:
Понял это! Теперь, когда я немного больше понял, как различные компоненты JS работают в стеке MERN.
«Kind» — это свойство внутри CastError и ValidationError, которые генерируются в зависимости от ошибки, возникшей при использовании пакета Mongoose.
До перехода на Mongoose v4 свойство «type» использовалось для определения того, какой тип ошибки CastError или ValidationError произошел. Однако это противоречило движку JavaScript версии 8, использующему внутреннее свойство Error.type.
Все еще не нашел много информации в документации Mongoose относительно того, какие возможные значения мы можем получить из свойства «kind», но, по крайней мере, мы знаем, откуда оно взялось, и в примечании к выпуску ниже объясняется, почему оно было сделано.