【问题标题】:How to exit from a stack of middleware in Express.js如何从 Express.js 中的中间件堆栈中退出
【发布时间】:2015-04-07 05:49:16
【问题描述】:

我正在使用 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'成功,它应该直接调用'service'中间件,否则进入下面的日志中间件并结束请求。但我的问题是我想不出一种可以跳过日志中间件的方法,我搜索并发现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();
    });

但我不确定如何相应地更改我的中间件才能做到这一点。

【问题讨论】:

    标签: node.js express error-handling middleware


    【解决方案1】:

    next 是一个节点样式的回调,意思是fn(err, ..),所以你的next('route') 只能用于调用错误处理程序。

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

    【讨论】:

    • 你的意思是拥有三个独立的错误处理中间件,以便它们可以处理各种错误,就像快递页面所说的那样?
    猜你喜欢
    • 2018-12-07
    • 2014-04-17
    • 1970-01-01
    • 2013-10-25
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多