似乎如果我想转移到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
,它仍会有效吗?
答案 0 :(得分:15)
这是Connect(负责此行为的node.js中间件)设计的一个有意义的方面。中间件接收的next
函数不堆栈中的下一个中间件;它是一个Connect生成的函数,它要求下一个中间件处理它(以及做一些额外的东西来处理特殊情况,比如没有“下一个中间件”)。
如果您的中间件应该返回响应,那么就这样做。如果它不应该,则暗示某些后来的中间件应该返回响应。如果您需要将数据传递给流程的后续部分,则应将其附加到请求对象req
的相应部分。
例如,捆绑的bodyParser
中间件负责根据请求正文的内容填充req.rawBody
和req.body
。捆绑的basicAuth
中间件基于HTTP身份验证填充req.remoteUser
。
这是您应该尝试模拟的模式:一堆中间件,每个中间件都有一个基本的增量来处理请求。如果你想要建模的东西不适合这个范例,那么你应该只有一个函数来处理请求,你可以从中调用所有你自己的应用程序逻辑。