我想根据路径的外观定义不同的中间件.
事情是道路可能会谨慎;我想支持以下路径:
/chat/auth/test /chat/auth/add /chrome/auth/test /chrome/add
每次auth在路径中我都希望调用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,它根本不会增加复杂性,但我只是好奇它是否可以解决这与通配符或正则表达式:)
解决方法
app.use(/auth/,authAuthentication);
这将为包含auth的每个请求调用authAuthentication.需要考虑的一些事项:
>这是一个正则表达式,因此您只需要/ … /作为分隔符而不是引号
>请注意,如果您有多个与路由匹配的中间件(例如另一个与/ chat /作为RegEx,并且您调用/ auth / chat或/ chat / auth,则会调用两个中间件.因此,考虑到这一点很重要app.use()调用的顺序.
> authAuthentication需要(request,response,next)参数.如果您在示例中直接调用该函数,则该函数应返回一个将采用三个快速中间件参数的函数.
>通常的做法是将所有require调用放在脚本的顶部
>确保你完全阅读并理解Express Routing.这太棒了.