Javascript Don';无法获取无效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

设置WorkUtid参数时出现以下错误:

未经处理的PromisejectionWarning:CastError:在模型“训练”的路径“\u id”处对值“5fb02bd8b61abc02”转换为ObjectId失败

如果WorkUtid存在,我可以成功地发出GET请求,但是当我尝试使用不存在的id时,它应该会给我404响应,但它没有。有什么我遗漏的吗

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块中