【问题标题】:Node asynchronous route code节点异步路由代码
【发布时间】:2014-09-18 19:11:02
【问题描述】:

我正在使用带有 express 4.0 的节点。我在互联网上(包括文档)找不到任何关于在路由中嵌入异步代码的信息。

使用中间件非常简单:

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

路由的问题是没有next回调,那么express怎么知道什么时候移动到下一个job呢?

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

如果我不得不猜测,我会说 express 在上述函数退出后立即移动到下一个任务。但出于好奇,我启动了以下代码...

app.get('/something', function (req, res, next)
{
  console.log(next);
});

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

【问题讨论】:

  • 您能否再清楚一点,您想在路由中放入什么异步代码,以及与所有路由恰好都有的next 回调有什么关系。
  • 当你res.render()某事时,你不需要调用next()(即使它被传递了,如果你想可以),因为它是链的末端
  • Express 不知何故需要知道我的回调何时退出,以便它可以关闭套接字并删除与此请求关联的数据。我是否理解正确,如果我调用res.render,它会假定没有安排异步任务并且它不必等待next 被调用?

标签: javascript node.js asynchronous express


【解决方案1】:

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

next 可以让你走下一条映射你的价值的路线,你可以在这里找到一个很好的解释:What is the parameter "next" used for in Express?

但是根据您在这里的要求。在res 对象上调用render() 的那一刻,将发送数据并关闭套接字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2016-02-21
    • 2017-01-24
    • 2015-03-08
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多