为什么 req.route 显示以前的路线

Why is req.route showing previous route

我有

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 如下: .

这给我错误,因为第一个路由的验证要求 Id 为 Guid。一年多了一直这样,现在不行了,如果我把路由器 .route('/link-metadata') ... 在 /:id 路由之上,它有效。为什么会这样?

因为顺序。

.route('/:id') 这基本上意味着 /.* 所以,任何路线都属于这个范围。

因此,当您击中 /link-metada 时,它击中了 /:id 路线。其中 req.param.id"link-metada".

将您的 /link-metadata 放在 /:id 路线上方,它将起作用。