Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Javascript 如何在Node.js Express中使用多个请求处理功能?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何在Node.js Express中使用多个请求处理功能?

Javascript 如何在Node.js Express中使用多个请求处理功能?,javascript,node.js,express,Javascript,Node.js,Express,我需要在我的应用程序中的大多数路由中执行重复的身份验证过程。我决定给它一些结构,并在中间件功能中完成重复的工作 如果auth进程无效,我应该响应并避免执行第二个函数,即终止请求 因此,不是: app.route('/someRoute').all(function(request,response){}); 我试过这样的方法: app.route('/someRoute').all(repetitiveWork,secondMiddlewareFunction); 特别是这是我得到的虚拟示例

我需要在我的应用程序中的大多数路由中执行重复的身份验证过程。我决定给它一些结构,并在中间件功能中完成重复的工作

如果auth进程无效,我应该响应并避免执行第二个函数,即终止请求

因此,不是:

app.route('/someRoute').all(function(request,response){});
我试过这样的方法:

app.route('/someRoute').all(repetitiveWork,secondMiddlewareFunction);
特别是这是我得到的虚拟示例:

app.route('/rutas').get(sum,test);


function sum (request,response,next) {

    if (5>1) {
        response.status(144).end('Fin');
        return next();
    }
};

function test (request,response,next) {
    response.send('Still alive');
};
然而,当我试图做一个GET to
/rutas
的时候,我甚至没有得到响应。我做错了什么

响应结束后不能调用next(),调用next()是为了将请求/响应传递给堆栈中的下一个中间件。考虑这个例子:

var app = require('express')();
app.route('/rutas').get(sum, test);
app.listen(function () { console.log(this.address()); });
var i = 0;

function sum (request, response, next) {
    i += 1;
    if (i % 2 === 0) {
        return response.status(200).end('Fin');
    }
    return next();
}

function test (request, response, next) {
    response.send('Still alive');
}

您需要在
if
语句之外调用
next()
,如果不想继续,还需要添加一个返回,以跳出中间件的功能范围
next()
基本上是说,不要停留在这个中间件上,转到下一个中间件上

app.route('/rutas').get(sum, test);

function sum (request, response, next) {
    if (5>1) {
        return response.status(144).end('Fin');
    }
    next();
};

function test (request, response) {
    response.send('Still alive');
};

您没有在中间件中调用
next()
。我尝试了
next()
return next()
,但没有结果。不,您需要在if语句之外调用next,否则它无法进入中间件堆栈中的下一个函数。我理解。。。然而我需要的是。。“如果发生了什么事情,就没有机会进入下一个middlware,只需响应并结束请求”我有一个stacktrace,其中有:错误:发送后无法设置头。因为第二个中间件
app.route('/rutas').get(sum, test);

function sum (request, response, next) {
    if (5>1) {
        return response.status(144).end('Fin');
    }
    next();
};

function test (request, response) {
    response.send('Still alive');
};