Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs express通配符路由不工作_Node.js_Express_Wildcard - Fatal编程技术网

Node.js nodejs express通配符路由不工作

Node.js nodejs express通配符路由不工作,node.js,express,wildcard,Node.js,Express,Wildcard,我正在nodejs中使用express作为路由器进行API开发 现在,我正在尝试实现一个客户端id和一个apikey,以便为API添加一些安全性,我面临的问题是下一个: 我的一个API调用如下所示: router.get(“角色/获取对象/:邮件/:过滤器*?”) 这意味着,我可以请求这样一个对象: /roles/get对象/mail@mail.com/客户 现在棘手的部分开始了。。。当我需要建立一个中间件来读取客户机id和一个apikey来验证客户机是否有权使用API时,我这样做了: 在中间件

我正在nodejs中使用express作为路由器进行API开发

现在,我正在尝试实现一个客户端id和一个apikey,以便为API添加一些安全性,我面临的问题是下一个:

我的一个API调用如下所示:
router.get(“角色/获取对象/:邮件/:过滤器*?”)
这意味着,我可以请求这样一个对象:
/roles/get对象/mail@mail.com/客户

现在棘手的部分开始了。。。当我需要建立一个中间件来读取客户机id和一个apikey来验证客户机是否有权使用API时,我这样做了:

在中间件声明中,我使用以下通配符:
router.all('/*',函数(req,res,next){
XXXX})

问题是,我在中间件中尝试过,作为通配符的一切。。。 我希望任何API调用都通过该中间件进行过滤,但显然我找不到合适的通配符

当我使用/roles/*作为通配符时,如果我请求
/roles
,它确实可以工作,但是当我使用完整的URL时,比如:
/roles/get objects/mail@mail.com/客户
它不会通过我的中间件

有人知道吗?我开始失去理智了

非常感谢你们所有人

编辑: 现在,我使用以下中间件声明:
router.use(函数(req,res,next){XXXX}

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

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

该应用程序直接进入我的路径,但忽略了我的中间件: router.get(“角色/获取对象/:邮件”


我不明白为什么会发生这种情况,显然所有事情都应该首先通过我的中间件,还是我错了?

如果要建立一个中间件来检查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.

是不允许使用@符号吗?@lumio
@
是允许的,请检查酷!学到了一些新东西。谢谢:这就是问题所在,我先声明get,然后声明中间件!非常感谢:)