javascript - 在 findByIdAndDelete 上处理 NodeJS DELETE 端点中的捕获
问题描述
我正在尝试找到处理输出/响应中捕获错误的最佳方法。
我有这条通过 ID 删除游戏的路线
router.delete("/delete/:id", (req, res) => {
(async () => {
try {
let deleteGame = await gameModel.findByIdAndDelete(ObjectId(req.params.id)).exec();
if (deleteGame === null) {
res.json({ error: `No game found with id ${req.params.id}` })
} else {
res.json({ message: `Game ${game.name} deleted` })
}
} catch (error) {
console.log(error)
}
})();
});
例如,当 ID 采用意外格式时,mongoose 将
Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
在“catch”中返回
我不确定这是否是一个好习惯res.json({ message: 'An error occured' })
- 这不是让服务器记录等吗?
解决方案
这是示例解决方案:
router.delete("/delete/:id", (req, res) => {
(async () => {
try {
let deleteGame = await gameModel.findByIdAndDelete(ObjectId(req.params.id)).exec();
if (deleteGame === null) {
res.status(404).send({ error: `No game found with id ${req.params.id}` })
} else {
res.status(204).send({ message: `Game ${game.name} deleted`, })
}
} catch (error) {
console.log(error);
// pass this to error handler middleware, this will give 500
next(error);
}
})();
});
server.js 或 index.js 中的错误处理程序中间件
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.json({
errors: {
message: err.message || 'Internal Server Error!',
},
});
})
推荐阅读
- node.js - Mongoose,无法使用 default_language 创建文本索引:'none'
- python - 电视节目上的 Last_seen 函数
- vue.js - v-model 奇怪的行为或在 VueJS 中是正常的
- python - 如何获取该表的具体文本?
- tensorflow - Windows 10 中 keras-gpu、tensorflow、cudatoolkit 和 cuDNN 之间的当前版本兼容性如何?
- sql - 使用昨天和今天的值对数据库执行操作
- reactjs - 提交时如何获取Formik initialValues?
- runtime-error - 在本地使用 SageMaker 运行超参数调整作业时出错
- react-native - 如何将文本与底部对齐?
- python - 使用 pandas 对对类别进行计数,以从一个整洁的格式 DataFrame 返回一个旋转的 DatafFame