考虑以下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
。您能否解释一下为什么以及如何解决此问题?
答案 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.
});