Неожиданная ошибка при маршрутизации вызова с неверным запросом с помощью Express - PullRequest
1 голос
/ 12 мая 2019

Рассмотрим следующий экспресс-код:

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 ]

1 голос
/ 12 мая 2019

Ваш маршрут /v1/api/book/:id ожидает идентификатор.Вы отправили сообщение без указания идентификатора, который не был объявлен ни в одном из маршрутов приложения.если вам нужно передать id в качестве необязательного параметра, тогда ваш маршрут должен выглядеть следующим образом: v1/api/book/:id?

И , Я рекомендую возвращать правильный код состояния при работе с API.Вам следует обновить код состояния с 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.
});
1 голос
/ 12 мая 2019

Вы должны объявить параметр пути id необязательным, иначе маршрут не будет совпадать (см. http://expressjs.com/en/guide/routing.html#route-parameters для получения дополнительной информации).

Вы можете сделать это так:

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