7
我正在使用Express 4.0的节点。我无法在Internet上找到任何关于在路由中嵌入异步代码的文档(包括文档)。节点异步路由代码
随着中间件它很简单:
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
});
如果我不得不猜测,我会说express在上述函数退出后立即移动到下一个任务。但是,出于好奇,我已经推出了下面的代码...
app.get('/something', function (req, res, next)
{
console.log(next);
});
...,实际上有一些next
回调过去了。那么这里发生了什么?它在幕后如何工作?我怎么能把异步代码放在那里?
你可以更清楚一点,你想在路由中放入什么样的异步代码,以及与下一个回调有关的所有路由是如何发生的。 – adeneo
当你调用'res.render()'的时候,你不需要调用next()(即使它被传递,所以你可以*如果你想的话),因为它是链的**端**。 – Bergi
Express以某种方式需要知道我的回调何时退出,因此它可以关闭套接字并删除与此请求关联的数据。我是否理解正确,如果我调用'res.render',它会假定没有安排异步任务,并且不需要等待'next'被调用? –