我遇到了一个恼人的问题:“错误:发送后无法设置 header 。”在 express 中。这段代码最初使用 Restify 而不是 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();
});
最佳答案
在路由回调结束时,删除:
return next();
这里不需要它,并且该行始终会在 async.parallel
完成之前执行(代码中的 collateResults
)。您很可能会在后续路由中发送响应,然后在完成两个请求后再次发送响应。
关于node.js - Express Async - 发送后无法设置 header ,双重回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34803488/