通配符或正则expression式节点在中间件上表示装载path
我想定义不同的中间件,具体取决于path的外观。
事情是,path可能会警惕; 我想例如支持以下path:
/chat/auth/test /chat/auth/add /chrome/auth/test /chrome/add
每次auth在path中,我都希望auth中间件被调用, 聊天和chrome我希望他们各自的中间件被调用。
app.js:
// Middleware authentication var chatAuthenticate = require('./server/middleware/chat-authenticate'); app.use('/chat', chatAuthenticate(addon)); var authAuthentication = require('./server/middleware/auth-authenticate'); app.use('/auth', authAuthentication());
我明白,我可以添加多个条目到app.js的每个可能的组合,如/ chat / auth和/ chrome / auth,它不会增加复杂性,但我只是好奇,如果有可能解决这与通配符或正则expression式:)
app.use(/auth/, authAuthentication);
这将为每个包含auth
任何地方的请求调用authAuthentication。 有几件事要考虑:
- 这是一个正则expression式,所以,而不是引号,你只需要/ … /作为分隔符
- 请注意,如果您有多个与路由匹配的中间件(例如,另一个与
/chat/
为RegEx的中间件,并且您调用/auth/chat
或/chat/auth
,则将调用这两个中间件。因此,重要的是要考虑您的app.use()
调用顺序。 - 期望
(request, response, next)
参数需要authAuthentication。 如果直接调用该函数,则函数将返回一个函数,该函数将采用三个高速中间件参数。 - 通常的做法是将所有
require
调用放在脚本的顶部 - 确保您完全阅读并理解Express Routing 。 太棒了。