节点异步路由代码

时间:2014-07-27 12:33:03

标签: javascript node.js asynchronous express

我使用带有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回调。那么这里发生了什么?它是如何在幕后工作的?我怎样才能将异步代码放在那里?

1 个答案:

答案 0 :(得分:5)

Express将等到您致电res.render以关闭套接字。这意味着你可以将res.render传递给一个需要X秒执行的回调,并且一切仍然有效。

next允许您转到映射您的值的下一条路线,您可以在此处找到一个非常好的解释:What is the parameter "next" used for in Express?

但根据你在这里提出的问题。在render()对象上调用res时,将发送数据并关闭套接字。