【发布时间】: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