使用Node.js Express服务器,我们收到错误"无法发送两次标题。"如果我们尝试向同一请求发送两个响应。我想找出阻止发送两个响应的最佳方法,对于这个特定情况,但也可能对其他人也是如此。
我有一个简单的/测试路由,它返回有关服务器状态的信息,它看起来像这样:
app.get('/test', function (req, res, next) {
var client = redis.createClient();
var response = {};
var alreadySentResponse = false; //I use a boolean to check if I already sent a response
client.on("error", function (err) { //this callback will invoke res.send
log.error('error in redis client test error callback:', err);
if(alreadySentResponse === false){
alreadySentResponse = true;
res.status(500).send({"test message from SmartConnect": err});
}
});
client.info(function (err, resp) { //this callback will also invoke res.send
response['redisInfo'] = resp;
if(alreadySentResponse ===false){
alreadySentResponse = true;
res.status(200).send({"test message from SmartConnect": response});
}
});
});
有更好的方法吗? res对象是否可以跟踪它是否已经发送?如果res.send被调用两次等似乎会使服务器崩溃等等。另一个问题当然是,如果客户端出现内部错误,如果成功响应被发送,那并不意味着我不会#39;我还想发送client.on('错误')消息...
答案 0 :(得分:4)
您可以查看res.headersSent
if (res.headersSent) return;
client.info(function (err, resp) { //this callback will also invoke res.send
if (res.headersSent) return;
response['redisInfo'] = resp;
res.status(200).send({"test message from SmartConnect": response});
});