Nodejs和Connect“next”功能

时间:2011-08-01 02:59:52

标签: javascript node.js connect middleware next

似乎如果我想转移到Nodejs中的“下一个”函数(通常可能是Javascript?)我无法将参数传递给下一个函数。

这就是我的意思:

app.get('/webpage', SomeFunction, NextFunction);

function SomeFunction (req, res, next) {
    // Do things
    next();
}

function NextFunction (req, res) {
    // Do other things
}

现在,如果在SomeFunction我说next(req, res);它似乎不起作用。它永远不会到达方法。显然我不能直接传递参数......但我的问题是为什么?下一个函数如何知道要使用哪些参数?是因为它们被命名相同还是自动传递第一和第二参数?如果NextFunction使用blah, bleet代替req, res,它仍会有效吗?

1 个答案:

答案 0 :(得分:15)

这是Connect(负责此行为的node.js中间件)设计的一个有意义的方面。中间件接收的next函数堆栈中的下一个中间件;它是一个Connect生成的函数,它要求下一个中间件处理它(以及做一些额外的东西来处理特殊情况,比如没有“下一个中间件”)。

如果您的中间件应该返回响应,那么就这样做。如果它不应该,则暗示某些后来的中间件应该返回响应。如果您需要将数据传递给流程的后续部分,则应将其附加到请求对象req的相应部分。

例如,捆绑的bodyParser中间件负责根据请求正文的内容填充req.rawBodyreq.body。捆绑的basicAuth中间件基于HTTP身份验证填充req.remoteUser

这是您应该尝试模拟的模式:一堆中间件,每个中间件都有一个基本的增量来处理请求。如果你想要建模的东西不适合这个范例,那么你应该只有一个函数来处理请求,你可以从中调用所有你自己的应用程序逻辑。