Node Express 4 在多次 API 调用后发送响应
Node Express 4 send a response after multiple API calls
我正在使用 Express4 构建一个 NodeJS 服务器。我将此服务器用作前端 angular 应用程序和第三方 API 之间的中间人。
我创建了我的前端应用程序请求的特定路径,我希望在该路径上多次调用 API 并合并所有响应,然后发送结果响应。
我不确定如何执行此操作,因为我需要等到每个 API 调用完成。
示例代码:
app.post('/SomePath', function(req, res) {
var merged = [];
for (var i in req.body.object) {
// APIObject.sendRequest uses superagent module to handle requests and responses
APIObject.sendRequest(req.body.object[i], function(err, result) {
merged.push(result);
});
}
// After all is done send result
res.send(merged);
});
如您所见,我在循环中调用 API,具体取决于我在请求中收到的 APIObject.sendRequest 数量。
完成所有操作并合并 API 个回复后如何发送回复?
谢谢。
查看 this answer,它使用 Async
模块同时发出几个请求,然后在它们全部完成时调用回调。
根据@sean 的回答,我相信 each
比 map
更适合。
它看起来像这样:
var async = require('async');
async.each(req.body.object, function(item, callback) {
APIObject.sendRequest(item, function(err, result)) {
if (err)
callback(err);
else
{
merged.push(result);
callback();
}
}
}, function(err) {
if (err)
res.sendStatus(500); //Example
else
res.send(merged);
});
首先,你不能在循环中执行异步方法,那是不正确的。
您可以使用 the async
module's map function.
app.post('/SomePath', function(req, res) {
async.map(req.body.object, APIObject.sendRequest, function(err, result) {
if(err) {
res.status(500).send('Something broke!');
return;
}
res.send(result);
});
});
我正在使用 Express4 构建一个 NodeJS 服务器。我将此服务器用作前端 angular 应用程序和第三方 API 之间的中间人。 我创建了我的前端应用程序请求的特定路径,我希望在该路径上多次调用 API 并合并所有响应,然后发送结果响应。 我不确定如何执行此操作,因为我需要等到每个 API 调用完成。 示例代码:
app.post('/SomePath', function(req, res) {
var merged = [];
for (var i in req.body.object) {
// APIObject.sendRequest uses superagent module to handle requests and responses
APIObject.sendRequest(req.body.object[i], function(err, result) {
merged.push(result);
});
}
// After all is done send result
res.send(merged);
});
如您所见,我在循环中调用 API,具体取决于我在请求中收到的 APIObject.sendRequest 数量。
完成所有操作并合并 API 个回复后如何发送回复?
谢谢。
查看 this answer,它使用 Async
模块同时发出几个请求,然后在它们全部完成时调用回调。
根据@sean 的回答,我相信 each
比 map
更适合。
它看起来像这样:
var async = require('async');
async.each(req.body.object, function(item, callback) {
APIObject.sendRequest(item, function(err, result)) {
if (err)
callback(err);
else
{
merged.push(result);
callback();
}
}
}, function(err) {
if (err)
res.sendStatus(500); //Example
else
res.send(merged);
});
首先,你不能在循环中执行异步方法,那是不正确的。
您可以使用 the async
module's map function.
app.post('/SomePath', function(req, res) {
async.map(req.body.object, APIObject.sendRequest, function(err, result) {
if(err) {
res.status(500).send('Something broke!');
return;
}
res.send(result);
});
});