我正在尝试将JSON从两个网址发送到一个网页(我正在创建一个网页)。当我发送一个请求时,它完美地工作,但是一旦我添加另一个请求,它就会发送一个错误,说“在发送之后无法设置标题:。
app.get("/service", function(req, res) {
request("http://example.com", function(error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
res.render("example.ejs", { data: data });
}
})
request("http://123.com", function(error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
res.render("example.ejs", { data: data });
}
})
});
答案 0 :(得分:1)
发生此错误是因为您不允许将setCurrentLineItemValue
渲染两次。我会告诉你两种方法来实现你的目标,没有任何错误。
1)这种方式是最佳实践。
example.ejs
和第二种方式:
2)这种做法是不好的做法,避免在回调中使用回调,但无论如何都可行。
// Install request-promise package first using this command below:
npm install request-promise;
// then replace your code with this one below:
app.get("/service", function(req, res) {
var request = require('request-promise');
var data1;
request("http://example.com")
.then(function(data) {
data1 = JSON.parse(data);
return request("http://123.com");
})
.then(function(data) {
data2 = JSON.parse(data);
console.log('data1', data1, 'data2', data2);
res.render("example.ejs", { data1: data1, data2: data2 });
});
});
总结:我建议你使用1种方式,阅读这篇关于承诺的文章: https://strongloop.com/strongblog/promises-in-node-js-with-q-an-alternative-to-callbacks/并编写干净的代码。我只是解释说,promises是避免回调内部回调的工具。