无法使用node.js获取redis键值对(err\u http\u headers\u sent)

sh7euo9m  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(447)

尝试使用node.js从localhost redis客户端获取键值对。
如果我包括 res.json() 在function/for循环中,多次发送响应会导致http\ U头错误。
如果我在函数/循环外定义它,就会得到一个空数组。
错误:

_http_outgoing.js:485
    throw new ERR_HTTP_HEADERS_SENT('set');
    ^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

下面是的代码 app.js ```
router.get('/route1', function(req, res)
{
var valarr=[];
client.keys('*', function(err, keys) {
console.log(keys);
for(var i=0;i<keys.length;i++){
client.get(keys[i], function (error, value) {
if (err) return console.log(err);
console.log(value);
valarr.push(value);
// res.json({result1:keys, result2:valarr});
//I get ERR_HTTP_HEADERS_SENT if res.json() is defined here
});
}
console.log(valarr); //Empty
res.json({result1:keys, result2:valarr});
//Returns an empty array (valarr)
});
});

t98cgbkg

t98cgbkg1#

您正在获取(err\uhttp\u headers\u sent),因为您没有检查值变量是否有值。只需使用if添加条件来检查值变量。如果值将有值,则只有它将被添加到valarr数组中,并将发送更新的valarr数组作为响应。
解决方案:

router.get('/route1', function(req, res)
{ 
    var valarr=[];
    client.keys('*', function(err, keys) {
        console.log(keys);
        for(var i=0;i<keys.length;i++){
            client.get(keys[i], function (error, value) {
                if (err) return console.log(err);

                if(value){
                  console.log(value);
                  valarr.push(value);      
                  res.json({result1:keys, result2:valarr});
                }
            });  
        }
        console.log(valarr); //Empty
        res.json({result1:keys, result2:valarr});
        //Returns an empty array (valarr)
    });
});

相关问题