与Express一起路由不良请求调用时,出乎意料的错误



考虑以下明确代码:

router.get('/v1/api/book/:id', function (req, res) {
  if (!req.params.id)
    res.status(401).send('Missing book id');
  res.status(200).send('Book found!');
});
  • 通过调用http://myserver/v1/api/book/12345689,应用程序返回 200 > Book found!,如预期的。
  • 但是,http://myserver/v1/api/book返回 404 > Cannot GET /v1/api/book,而不是 401 > Missing book id

您能解释一下我为什么以及如何解决此行为?

您必须声明 id路径参数可选,否则路由不匹配(请参阅http://expressjs.com/en/guide/routing.html#route-parameters for in更多信息(。

您可以这样做:

router.get('/v1/api/book/:id?', function (req, res) { ... }

您的路由/v1/api/book/:id期望ID。您已经在应用程序中任何路由中未通过ID宣布的ID发布。如果您需要将ID作为可选参数传递,那么您的路线应该看起来像v1/api/book/:id?

和,我建议在处理API时返回适当的状态代码。如果参数没有ID或没有ID的书,则应更新状态代码401至404。401状态代码代表未经授权的错误。

router.get('/v1/api/book/:id?', function (req, res) {
  //if parameter has no id passed in send 404 response with message
  //if paraneter has id, search for book with that id . 
  //if any book is found, then send response 200 with message else send response 404 with message.
});

最新更新