首页 > 解决方案 > 当路由参数为一定值时如何添加自定义路由来表达

问题描述

情况

我有一条如下所示的路线:

router.get('/api/v1/tokens/:token_name', middleware1, middleware2)

它适用于token_name. 现在,我想为一个新token_name值添加处理(假设它是token_name: baz),但是这个有一个特殊的条件,需要另一个中间件,我们称之为它middleware0,运行之前middleware1middleware2

我试过的

我现在处理它的方式是添加另一条优先于上述路线的路线,如下所示:

router.get('/api/v1/tokens/baz', middleware0, middleware1, middleware2)    
router.get('/api/v1/tokens/:token_name', middleware1, middleware2)

但是现在我无法访问token_name其他中间件中的变量,这是他们执行逻辑所必需的。

问题

有没有办法只使用快速路由器来解决这个问题,而不是向中间件添加任何代码?就像,要匹配特定值,还要将其添加为变量?

标签: javascriptnode.jsexpress

解决方案


您可以使用单条路线有条件地执行您的middleware0,如下所示

const middleware0 = (req, res, next) => {
  if (req.params.token_name !== 'baz') {
     next();
     return;
  }
  // actual middleware code handling request
};

router.get('/api/v1/tokens/:token_name', middleware0, middleware1, middleware2); 

推荐阅读