Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 Express Post函数中回调的执行顺序_Javascript_Node.js_Express_Callback - Fatal编程技术网

Javascript Express Post函数中回调的执行顺序

Javascript Express Post函数中回调的执行顺序,javascript,node.js,express,callback,Javascript,Node.js,Express,Callback,我在[express的路线处理方法]方面遇到了问题,特别是Post功能。 () 我正在尝试解析来自的一段代码 快递文件上说 给出了多个回调,所有回调都被平等对待,其行为就像中间件一样 我的问题是,以下陈述是否准确: 中间件就像一束连接在一起的管子。首先出现的中间件是首先列出的中间件。如果数据是水,则它将流经首先列出的管道 路由处理方法中的回调也是如此:回调是链接在一起的管道,如果通过这些“管道”注入数据,则通过列出的第一个回调,然后依次注入第二个回调。这是真的吗 作为后续问题,这些回调应该返回什

我在[express的路线处理方法]方面遇到了问题,特别是Post功能。
()

我正在尝试解析来自的一段代码

快递文件上说

给出了多个回调,所有回调都被平等对待,其行为就像中间件一样

我的问题是,以下陈述是否准确:

中间件就像一束连接在一起的管子。首先出现的中间件是首先列出的中间件。如果数据是水,则它将流经首先列出的管道

路由处理方法中的回调也是如此:回调是链接在一起的管道,如果通过这些“管道”注入数据,则通过列出的第一个回调,然后依次注入第二个回调。这是真的吗


作为后续问题,这些回调应该返回什么?第一个回调是否返回响应,第二个回调接收响应并将其视为请求?应该从管道中输出什么,我可以将其插入第二个管道吗?

在这种情况下,回调返回什么并不重要。他们正在调用
next
函数(此特定passport示例中未定义的第三个参数)。调用
next
函数时,将使用与第一个中间件相同的参数依次调用下一个中间件(相同的
req
,相同的
res

假设你有这个密码

function myFirstMiddleware(req, res, next) {//note the third parameter
    //you can change req and res objects
    next();
}

function secondMiddlewareInTheSequence(req, res, next) {
    //here you get the changes you've done to req and res since they are
    //the same objects
    res.end();
}

app.post('/', myFirstMiddleware, secondMiddlewareInTheSequence);
passport.authenticate在内部做的是,如果您的请求经过正确的身份验证,则调用
next
,这样您的中间件就可以获得控制权

您甚至可能不希望根据给定的条件(与passport所做的差不多)将控制权传递给其他中间软件,如下所示

function checkSecret(req, res, next) {
    if(req.query && req.query.secret === '42') {
        console.log('you are allowed to pass!');
        next();
    } else {
        console.log('you shall not pass!');
        res.status(403).end();
    }
}

如果将上述函数放在任何其他中间件之前,将阻止不包含机密的请求继续

解释得很清楚!因此,它基本上是相同的请求和响应对象,由不同的中间件一个接一个地进行调整。耶!对于正在发生的事情,我有一个很好的心智模型!如果你想更深入一点,看看谢谢你的提示!呼…这对我来说有点深。
function checkSecret(req, res, next) {
    if(req.query && req.query.secret === '42') {
        console.log('you are allowed to pass!');
        next();
    } else {
        console.log('you shall not pass!');
        res.status(403).end();
    }
}