使用Express路由错误的请求调用时发生意外错误

时间:2019-05-12 15:28:27

标签: javascript node.js express express-router

考虑以下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

您能否解释一下为什么以及如何解决此问题?

2 个答案:

答案 0 :(得分:1)

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

您可以这样做:

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

答案 1 :(得分:1)

您的路线/v1/api/book/: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.
});