使用 Node.js Express 服务器,如果我们尝试向同一请求发送两个响应,我们会收到错误“无法发送标头两次......”。我想找出防止发送两个响应的最佳方法,对于这种特殊情况,但也可能适用于其他情况。
我有一个简单的 /test 路由,它返回有关服务器状态的信息,如下所示:
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});
}
});
});
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?res 对象可以跟踪它是否已经发送吗?如果 res.send 被调用两次,服务器似乎会崩溃,等等。当然,另一个问题是,如果客户端存在内部错误,如果发送了成功响应,这并不意味着我不这样做除此之外还想发送 client.on('error') 消息...
您可以检查res.headersSent
if (res.headersSent) return;
Run Code Online (Sandbox Code Playgroud)
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});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2376 次 |
| 最近记录: |