我使用带有Express 4.0的节点。我无法在互联网(包括文档)上找到有关在路径中嵌入异步代码的任何内容。
使用中间件非常简单:
app.use('/something', function (req, res, next)
{
doSomethingAsync(function(err, probablySomethingElse)
{
// probably some error checking
next();
});
});
路由的问题是没有next
回调,那么表达式如何知道何时转移到下一个工作?
app.get('/something', function (req, res)
{
res.render('someTemplate');
// no next() here, but it still works
});
如果我不得不猜测,我会说在上述功能退出后,快速移动到下一个任务。但出于好奇,我发布了以下代码......
app.get('/something', function (req, res, next)
{
console.log(next);
});
...实际上已经传递了一些next
回调。那么这里发生了什么?它是如何在幕后工作的?我怎样才能将异步代码放在那里?
答案 0 :(得分:5)
Express将等到您致电res.render
以关闭套接字。这意味着你可以将res.render
传递给一个需要X秒执行的回调,并且一切仍然有效。
next
允许您转到映射您的值的下一条路线,您可以在此处找到一个非常好的解释:What is the parameter "next" used for in Express?
但根据你在这里提出的问题。在render()
对象上调用res
时,将发送数据并关闭套接字。