通配符或正则表达式节点表示中间件上的挂载路径

时间:2016-01-22 09:59:05

标签: regex node.js express wildcard webhooks

我想根据路径的外观定义不同的中间件。 enter image description here

事情是道路可能会谨慎;我想支持以下路径:

/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,它不会增加复杂性,但我只是好奇它是否是可以通过通配符或正则表达式来解决这个问题:)

2 个答案:

答案 0 :(得分:0)

app.use(/auth/, authAuthentication);

这会在任何地方为包含auth的每个请求调用authAuthentication。需要考虑的一些事项:

  • 这是一个正则表达式,因此您只需要/ ... / as delimiters
  • 而不是引号
  • 请注意,如果您有多个与路由匹配的中间件(例如另一个与/chat/匹配的中间件作为RegEx,并且您调用/auth/chat/chat/auth,则会调用这两个中间件。请务必考虑app.use()来电的顺序。
  • 需要authAuthentication才能获得(request, response, next)个参数。如果您在示例中直接调用该函数,则该函数应返回一个将采用三个快速中间件参数的函数。
  • 通常的做法是将所有require来电置于脚本顶部
  • 确保您完全阅读并理解Express Routing。太棒了。

答案 1 :(得分:0)

您可以使用通配符(至少在快递4中):

app.use('/chat/*', chatMiddleware);

首先将中间件应用于以“/ chat /”开头的任何请求。然后使用下一个级别,只适用于'/ chat / auth /*'...。

app.use('/chat/auth/*', function(req, res, next) {
    //.... middleware logic here


    //.... assuming we don't reject the call, call next() when done
    next();
));