Javascript Don';无法获取无效id的404响应
设置WorkUtid参数时出现以下错误: 未经处理的PromisejectionWarning:CastError:在模型“训练”的路径“\u id”处对值“5fb02bd8b61abc02”转换为ObjectId失败 如果WorkUtid存在,我可以成功地发出GET请求,但是当我尝试使用不存在的id时,它应该会给我404响应,但它没有。有什么我遗漏的吗Javascript Don';无法获取无效id的404响应,javascript,express,mongoose,Javascript,Express,Mongoose,设置WorkUtid参数时出现以下错误: 未经处理的PromisejectionWarning:CastError:在模型“训练”的路径“\u id”处对值“5fb02bd8b61abc02”转换为ObjectId失败 如果WorkUtid存在,我可以成功地发出GET请求,但是当我尝试使用不存在的id时,它应该会给我404响应,但它没有。有什么我遗漏的吗 workoutsRouter.param('workoutId', async (req, res, next, workoutId) =&g
workoutsRouter.param('workoutId', async (req, res, next, workoutId) => {
try {
await mongoose.connect('mongodb+srv://nalanart:hidingpassword@cluster0.2iplh.mongodb.net/workout-app-db?retryWrites=true&w=majority',
{ useNewUrlParser: true, useUnifiedTopology: true })
const workout = await Workout.findById(workoutId).exec()
if(Object.keys(workout).length === 0) {
res.sendStatus(404)
} else {
req.workout = workout
next()
}
} catch(error) {
throw error
}
})
回答您的问题非常简单,只需将
res.sendStatus(404)
添加到catch块中即可
但是,了解代码返回的内容很重要
404表示未找到的值。因此,当查询完成但未返回任何文档时,您可以发送404
。但如果查询失败,更好的选择是发送其他状态代码
在这种情况下,400代码可能是更好的选择。根据(以及其他许多标准),这是一个标准:
400错误请求:由于语法无效,服务器无法理解该请求
将res.sendStatus(404)添加到catch块中