Почему req.route показывает предыдущий маршрут

#javascript #node.js #express #express-router

#javascript #node.js #выразить #экспресс-маршрутизатор

Вопрос:

У меня есть

 const router = express.Router();

router
  .route('/:id') 
  .delete(
    validate(messageValidator.deleteById),
    MessageController.deleteById,
  )
  .get(
    validate(messageValidator.getById),
    MessageController.getById,
  );

router
  .route('/link-metadata')
  .get(
    validate(messageValidator.link),
    MessageController.getLinkMetadata,
  );
  

Я не знаю, как, но, когда я делаю запрос в / link-metadata, req.route выглядит следующим образом:
. введите описание изображения здесь

Это выдает мне ошибку, из-за проверки первого маршрута требуется, чтобы идентификатор был Guid. Так было больше года, теперь это не работает, если я добавлю router .route(‘/link-metadata’) … над маршрутом /:id это работает. Почему это происходит?

Комментарии:

1. Я предполагаю, что вам следует добавить некоторую проверку регулярных выражений к вашим параметрам: id (иначе это может быть что угодно, например, включить метаданные ссылки). Вы можете сделать это следующим образом : router.route('/:id([0-9] )' etc

Ответ №1:

Из-за порядка.

.route('/:id') это означает, что в принципе /.* так, любой маршрут подпадет под это.

Итак, когда вы нажимаете /link-metada , он попадает на /:id маршрут. Где req.param.id находится "link-metada" .

Поместите свой /link-metadata над /:id маршрутом, и он будет работать.