首页 > 解决方案 > 框架如何知道调用了哪个 api?

问题描述

框架如何知道调用了哪个 api?

app.get('/user/:userId/name/export', function (req, res) {
   var userId = req.params.userId;
}

app.get('/user/:userId/name/:name', function (req, res) {
   var userId = req.params.userId;
   var name = req.params.name
}

我正在开发一个 api 网关,需要一些访问控制的自定义。它需要阻止api调用并通过路径中的参数检查用户的角色,例如db中的userId和name。如果匹配文件中的配置,将传递acl并调用api,否则将返回401。所以如果url模式相似,我发现很难区分两个究竟是调用的api。有什么建议么?非常感谢您的帮助!

标签: javascriptnode.jsexpressgateway

解决方案


Express 路由器调用与 URL 路径匹配的每个回调。
Route/user/123/name/admin只匹配第二条路径,但 route/user/123/name/export匹配它们。如果您在第一个回调中结束请求,则永远不会调用第二个:

app.get('/user/:userId/name/export', function (req, res) {
   var userId = req.params.userId;
   res.end();
}

app.get('/user/:userId/name/:name', function (req, res) {
   var userId = req.params.userId;
   var name = req.params.name
}

回调将根据添加顺序调用。app.get('*', ...)因此,必须在最后添加全局路径。


推荐阅读