我正在用 Node.js 编写一个应用程序,我需要一些建议。
我收到来自客户端的 POST 请求。收到请求后,我调用了一些函数。在执行结束时,我需要回复使用 HTTP 响应发起请求的客户端。问题是:
- 我在异步接收请求后调用了许多函数。如何回溯到请求的相应响应对象。
- 我是否需要继续将其传递给后续的函数调用。
- 我什么时候决定调用 response.end()。由于它是异步函数调用,我不确定哪个将是我的最后一个函数调用。
我该怎么做?我能得到一些架构建议吗?
我正在用 Node.js 编写一个应用程序,我需要一些建议。
我收到来自客户端的 POST 请求。收到请求后,我调用了一些函数。在执行结束时,我需要回复使用 HTTP 响应发起请求的客户端。问题是:
我该怎么做?我能得到一些架构建议吗?
听起来您想使用async库之类的东西来处理异步任务(async.series或async.parallel听起来都合适)。
这样,您可以“分组”所有异步任务,并在所有任务完成时调用一个回调。从该回调中,您可以处理您的响应:
app.post('/your/route', function(req, res) {
async.parallel([
// start your tasks (called 'task1', 'task2', and pass the 'async' callback
// to them; once a task is done, it needs to call the callback)
function(cb) { task1(cb); },
function(cb) { task2(cb); },
...
], function(err, results) {
if (err)
// handle error
else
res.send('tasks done'); // or whatever you want to send back
});
});
(根据您的任务签名,您可以使用async.apply而不必为每个任务创建一个新函数)
传递响应对象听起来不是一个好主意,因为——如果我理解正确的话——你的任务不必自己生成响应。