【问题标题】:Unable to get redis key-value pair using Node.js无法使用 Node.js 获取 redis 键值对
【发布时间】:2020-07-21 03:41:00
【问题描述】:

我目前正在向我的 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

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

app.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.js redis http-headers


    【解决方案1】:

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

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

    【讨论】:

    • 如果您查看新的编辑。我将值存储在一个数组中,然后返回该数组。返回的数组是空白的,当我将它包含在函数client.get(keys[i]... 中时。我得到ERR_HTTP_HEADERS_SENT
    • 在您的res.json 中,您应该返回您的数组valarr,而不是value,它只存在于您的client.get 的回调中。
    • 发送回 ajax 调用的 valarr 为空。由于数组在函数内部附加了新值,而外部无法访问。
    • 当我将res.json() 包含在函数中时,该函数也将其放入for loop 中,并且多次发送响应。从而抛出 HTTP_HEADER_ERROR
    猜你喜欢
    • 2020-12-24
    • 2017-06-14
    • 2017-10-14
    • 2020-02-23
    • 1970-01-01
    • 2019-07-23
    • 2012-12-16
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多