1
我有一個惱人的地獄問題'錯誤:發送後無法設置標題。'在Express中。這個代碼最初使用Restify而不是Express,我一直在以某種形式出現這個問題,因爲它將其轉換。Express異步 - 發送後無法設置標題,雙重回調?
該代碼向另一個API(編輯出)提出2個異步請求,並將結果合併到單個JSON中,然後將其存儲到MongoDB中。
任何洞察力將不勝感激,因爲我已經嘗試了所有我能想到的,不知道爲什麼相同的功能可以在Restify中工作,而不是Express在適當的更改。
請不要在末日的金字塔評論,我知道這不是理想的,但在這裏,這不是重點;)
app.post('/rest/test', jsonParser, /*keycloak.protect(),*/ function (req, res, next) {
var requestObj = req.body;
try {
/* run async requests in parallel */
async.parallel([
function asyncReqV3(callback) {
request.post(reqUrl1, option_v3, function(err, response, body) {
if(err) {
console.log(err);
callback(true);
return;
} else {
callback(false, body);
}
});
},
/* v4 async request */
function asyncReqV4(callback) {
request.post(reqUrl2, option_v4, function(err, response, body) {
if(err) {
console.log(err);
callback(true);
return;
} else {
callback(false, body);
}
});
},
],
/* Collate results and send */
function collateResults(err, results) {
if(err) {
console.log(err);
return res.status(500).send("Server Error");
} else {
/* Merging results */
var hash = new Map();
results[0].body.krResult.forEach(function(obj) {
hash.set(obj.word, obj);
});
var final = results[1].body.data.map(function(obj) {
return Object.assign(hash.get(obj.word) || {}, obj);
});
var final_results = final.slice(0, 250).map(function(obj) {
return {
thing1: obj.something,
thing2: obj.somethingElse
}
});
/* Store results in DB */
db.results.insert({
request: requestObj,
response: final_results
});
res.status(200).send(final_results);
}
});
}
catch(e) {
console.log(e);
res.status(500).send({});
}
return next();
});
這確實可以解決問題。奇怪的是,我在之前的幾個點做過這樣的事情,並且遇到了像服務器空回覆這樣的問題,但今天沒有這樣的問題。必須改變別的東西。非常感謝! – Nodal
當然,很高興提供幫助 – cviejo