#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
маршрутом, и он будет работать.