node.js - 无法使用 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});
});
});
解决方案
您收到 ERROR_HTTP_HEADERS_SENT 的原因是因为您在 for 循环中调用,导致您的节点服务器在第一个响应已经发送到客户端之后res.json()
尝试在后续调用中设置响应标头。res.json()
res.json()
如果您想 console.log 记录您正在扫描的所有 redis 键的值,我建议将它们存储在一个数组中并在端点底部返回该数组。
推荐阅读
- javascript - 通过 couchdb 通过 nodejs 访问数据时出现凭据错误
- sql - 协助 Access ADP 和/或 SQL iif 语句
- python - 无法在 Amazon Linux 上运行 Chrome
- sql - 尝试在 Presto 中使用 unnest() 分解数组并由于额外的列而失败
- c - 为什么 C 语言的创建者决定支持一个没有大括号的 while 循环语句?
- python - 如何将python数据帧转换为JSON
- anylogic - 我们如何根据状态图更改 3D 动画对象(代理表示)颜色?
- vba - 在 PowerPoint VBA 中应用“裁剪到形状”
- node.js - 使用 Jest 和 TypeScript 测试单个文件
- github - 我在删除 github 存储库中的图像文件时遇到问题