中间件上的通配符或正则表达式节点表示安装路径
Wildcard or regex node express mount path on middleware
我想根据路径的外观定义不同的中间件。
问题是路径可能很谨慎;例如,我想支持以下路径:
/chat/auth/test
/chat/auth/add
/chrome/auth/test
/chrome/add
每次 auth 在路径中我都希望调用 auth 中间件,对于 chat 和 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)
参数。如果您像示例中那样直接调用该函数,则该函数应 return 一个将采用三个快速中间件参数的函数。
- 通常的做法是将所有
require
调用放在脚本的顶部
- 确保您已完全阅读并理解 Express Routing。太棒了。
您可以使用通配符(至少在 express 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();
));
我想根据路径的外观定义不同的中间件。
问题是路径可能很谨慎;例如,我想支持以下路径:
/chat/auth/test
/chat/auth/add
/chrome/auth/test
/chrome/add
每次 auth 在路径中我都希望调用 auth 中间件,对于 chat 和 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)
参数。如果您像示例中那样直接调用该函数,则该函数应 return 一个将采用三个快速中间件参数的函数。 - 通常的做法是将所有
require
调用放在脚本的顶部 - 确保您已完全阅读并理解 Express Routing。太棒了。
您可以使用通配符(至少在 express 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();
));