nodejs表示通配符路由无法正常工作

时间:2017-07-04 07:54:11

标签: node.js express wildcard

我在使用express作为路由器的nod​​ejs中进行API。

现在,我正在尝试实现一个客户端ID和一个apikey来为API添加一些安全性,而我面临的问题是下一个:&/ p>

我的一个API调用是这样的: router.get("roles/get-objects/:mail/:filter*?") 所以这意味着,我可以请求这样的对象: /roles/get-objects/mail@mail.com/customer

现在,棘手的部分开始......当我需要建立中间件来读取客户端ID和apikey来验证客户端是否有权获取API时,我这样做了:

在中间件的声明中,我使用这个通配符: router.all('/*', function (req, res, next) { XXXX})

问题是,我在中间件中试过,作为通配符一切...... 我希望通过该中间件过滤任何API调用,但显然我无法为其找到正确的通配符...

当我使用/ roles / *作为通配符时,如果我向/roles发出请求它确实有效,但当我使用完整的网址时:/roles/get-objects/mail@mail.com/customer它不会通过我的中间件。

所以有人有任何想法吗?我开始放松心情了

非常感谢你们所有人!

修改 现在我使用这个中间件声明: router.use(function (req, res, next) {XXXX})

所以当我打电话的时候: /roles/get-objects/

它被执行了,问题是当我将电子邮件添加到路由时: /roles/get-objects/mail@mail.com

应用程序直接进入我的路线,但省略了我的中间件: router.get("角色/获取的对象/:邮件",

我不明白为什么会发生这种情况,显然一切都应该先通过我的中间件,或者我错了?

1 个答案:

答案 0 :(得分:1)

如果要建立中间件来检查其URL以/roles/开头的所有HTTP请求,则应将中间件置于之前任何其他特定路由器定义:

router.use('/roles', function(req, res, next) {...});
...
router.get('/roles/get-objects/:mail', ...);

如果在特定路由之后定义了中间件,当HTTP请求进入时,特定路由被定位并处理,中间件不再被执行:

router.get('/roles/get-objects/:mail', ...);
...
router.use('/roles', function(req, res, next) {...}); // This middleware logic won't execute when request is sent to '/roles/get-objects/some-email', as the request has already been handled and response is already sent to browser.