2011-08-01 38 views
4

看来,如果我想移动到Nodejs中的“下一个”功能(通常可能是Javascript),我无法将参数传递给下一个功能。Nodejs和连接“下一个”功能

这里是我的意思是:

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它会继续工作吗?

回答

15

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

如果你的中间件应该返回一个响应,就这样做。如果不应该,这意味着后面的一些中间件应该返回一个响应。如果您需要将数据传递给流程后面的部分,则应将其附加到请求对象req的相应部分。

例如,捆绑的bodyParser中间件负责根据请求主体的内容填充req.rawBodyreq.body。基于HTTP认证,捆绑的basicAuth中间件填充req.remoteUser

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