我使用带有Express的Node.JS(以及用于视图的ejs),我想调用两个API端点来在同一页面中呈现它们并使用数据。我尝试过使用异步但我得到
ECONNRESET: Request could not be proxied!
这是我的代码
app.get('/profile', function(req, res) {
async.parallel([
function(next) {
var query = req.query.search;
var url = '1st url' + query;
var request = require('request');
request(url, function(error, body) {
var data = JSON.parse(body);
next(error, data);
});
},
function(next) {
request('2nd url', function(error, tlist) {
var list = JSON.parse(tlist);
next(error, list);
});
}], function(err, results) {
if (!err && results.statusCode == 200)
var data = results[0];
var list = results[1];
res.render('profile', {data: data, list: list});
});
});
答案 0 :(得分:0)
不确定Cloud9,但如果问题是解析数据,那么这里有几件事。
在尝试解析之前,您应该在每个请求上处理错误;如果parse抛出异常,则不会执行回调:
request(url, function(error, body) {
if (error) return next(error);
var data = JSON.parse(body);
next(null, data);
});
你应该在解析周围进行try / catch,如果有异常则执行你的回调错误:
request(url, function(error, body) {
if (error) return next(error);
var data;
try {
data = JSON.parse(body);
} catch (e) {
return next(new Error('Unable to parse body for ' + url));
}
next(null, data);
});
最后,您对results.statusCode
的当前检查将始终返回false,因为它是一个数组,因此您将无法到达请求的末尾。我猜这可能是问题所在。我还建议将async
中的任何错误传递给Express错误处理程序:
function(err, results) {
if (err) {
// pass to Express error handler...
}
var data = results[0];
var list = results[1];
res.render('profile', {data: data, list: list});
});