节点异步路由代码
Posted
技术标签:
【中文标题】节点异步路由代码【英文标题】: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
被调用?
【参考方案1】:
Express 将等到您调用 res.render
来关闭套接字。这意味着您可以将 res.render
传递给一个需要 X 秒执行的回调,并且一切仍然有效。
next
可以让你走下一条映射你的价值的路线,你可以在这里找到一个很好的解释:What is the parameter "next" used for in Express?
但是根据您在这里的要求。在res
对象上调用render()
的那一刻,将发送数据并关闭套接字。
【讨论】:
以上是关于节点异步路由代码的主要内容,如果未能解决你的问题,请参考以下文章
反应路由器基本代码拆分(获取第一个块,然后在后台异步获取其他块)