Express - 阻止发送两个+响应

时间:2015-06-19 23:24:54

标签: node.js express

使用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('错误')消息...

1 个答案:

答案 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});
});