gpt4 book ai didi

node.js - 如何从Express.js中的中间件堆栈退出

转载 作者:行者123 更新时间:2023-12-03 08:54:47 25 4
gpt4 key购买 nike

我正在使用REST Web应用程序后端,将中间件链接在一起时遇到了一些问题。

例如,每个请求必须经过的中间件栈就像[before1,service,after1],这是中间件“before1”的代码,这只是我用于测试的代码:

'use strict';

var express = require('express');
var router = express.Router();

router.use(function(request, response, next){
console.log('This is middleware BEFORE1');
var success = true
if (!success){
// Go the logging middleware underneath
next();

}
else{
// Go to the 'service' middleware
next('route');
}
})

router.use(function(request, response, next){
console.log('This is middleware LOGGING');
response.sendStatus(400);
response.end();
})


module.exports = router;

上面的代码只是在说“before1”是否成功,它应该直接调用“服务”中间件,否则转到下面的日志记录中间件并结束请求。但是我的问题是我无法找到一种方法可以跳过日志记录中间件,我搜索发现 next('route')可以提供帮助,但是在这里不起作用。我错过了什么?

提前致谢!

编辑:

更可取的是,最好是我可以在任何中间件中发布错误并使用错误处理程序中间件正确处理所有类型的错误。

我的顶级代码的骨架如下:
// An array of middleware to be executed asynchronously
operations = [before1, service, before2];

async.series(operations, function(err) {
if(err) {
// one of the functions passed back an error so handle it here
console.log('Handling error!!!!');
res.end();
// return next(err);
}
console.log('middleware get executed');
// no errors so pass control back to express
next();
});

但是我不确定该如何相应地更改中间件。

最佳答案

next是节点样式的回调,即fn(err, ..),因此您的next('route')仅可用于调用错误处理程序。

您可以通过向路由提供函数数组并使用快速错误处理程序作为全部捕获功能来直接实现您的系列(请参阅http://expressjs.com/guide/error-handling.html)

关于node.js - 如何从Express.js中的中间件堆栈退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29484645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com