我正在测试以下代码行.
router.get('/testAPI', function(req, res, next){
console.log('middleware 1');
next();
}, function(req, res, next) {
console.log('middleware 2');
next();
}, function(req, res){
res.send({ SecretData: 'abc123' });
});
Run Code Online (Sandbox Code Playgroud)
它按预期工作.但是在尝试添加时:
console.log('middleware 1');
next('route');
Run Code Online (Sandbox Code Playgroud)
而是在中间件1中,所以我可以跳过中间件2,我在路由上遇到404错误:无法GET/api/testAPI
谁有任何关于为什么会这样的建议/想法?
实际上我相信它会重定向到我的'/'路由器而不是我的'/ api'路由器,因为当我在我的'/'路由器中添加一个默认路由时,我得到的路由而不是404错误.
该文件解释说:
你可以提供多个类似中间件的回调函数,除了这些回调可以调用next('route')来绕过剩余的路由回调.
换句话说,通过调用next('route')你告诉Express不要打扰你为该路由传递的其余回调.
这与中间件回调和路由处理程序回调实际上是一回事,Express没有办法知道你传递的最后一个回调实际上是你要调用的回调.
解决此问题的一种方法是从路径的路径处理部分拆分路径的中间件 - 部分:
app.get('/testAPI', function(req, res, next) {
console.log('middleware 1');
next('route');
}, function(req, res, next) {
// skipped...
console.log('middleware 2');
next();
});
app.get('/testAPI', function(req, res) {
res.send({ SecretData: 'abc123' });
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |