考虑以下明确代码:
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.
});