节点异步路由代码

Seb*_*wak 7 javascript asynchronous node.js express

我正在使用Express 4.0节点.我在网上(包括文档)找不到有关在路由中嵌入异步代码的任何内容.

使用中间件非常简单:

app.use('/something', function (req, res, next)
{
  doSomethingAsync(function(err, probablySomethingElse)
  {
    // probably some error checking
    next();
  });
});
Run Code Online (Sandbox Code Playgroud)

路由的问题是没有next回调,那么表达式如何知道何时转移到下一个工作?

app.get('/something', function (req, res)
{
  res.render('someTemplate');
  // no next() here, but it still works
});
Run Code Online (Sandbox Code Playgroud)

如果我不得不猜测,我会说在上述功能退出后,快速移动到下一个任务.但出于好奇,我推出了以下代码......

app.get('/something', function (req, res, next)
{
  console.log(next);
});
Run Code Online (Sandbox Code Playgroud)

......实际上有一些next回调通过了.那么这里发生了什么?它是如何在幕后工作的?我怎样才能将异步代码放在那里?

fms*_*msf 5

Express会等到你打电话res.render关闭套接字.这意味着你可以传入res.render一个需要X秒执行的回调,一切都会工作.

next允许你去映射你的价值在未来的路线,你可以在这里找到一个很好的解释:什么是快车"下一步"用于参数?

但根据你在这里问的问题.render()res对象上调用该时刻,然后将发送数据并关闭套接字.