首页 > 解决方案 > 无法使用 Node.js 获取 redis 键值对

问题描述

我目前正在向我的 Node 应用程序发出发布请求,以从index.html. client.set用于设置键值和类似client.get地获取所有键值。但是,我无法console.log()尝试两次发送响应的值。

错误:

_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

下面是我用来获取所有键值的逻辑。

应用程序.js

var client      = redis.createClient(); 
var port = 6379;
var host = "127.0.0.1";
var client = redis.createClient(port, host);
router.post('/route1', function(req, res)
{ 
    var valarr=[];
    keyname= req.body.keyname;
    valuename= req.body.valuename;
    console.log(keyname);
    console.log(valuename);
    
    client.set(keyname, valuename, function(err, reply) {
        console.log(reply);
    });

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

标签: node.jsredishttp-headers

解决方案


您收到 ERROR_HTTP_HEADERS_SENT 的原因是因为您在 for 循环中调用,导致您的节点服务器在第一个响应已经发送到客户端之后res.json()尝试在后续调用中设置响应标头。res.json()res.json()

如果您想 console.log 记录您正在扫描的所有 redis 键的值,我建议将它们存储在一个数组中并在端点底部返回该数组。


推荐阅读