javascript - 无法使用 Node.js (ERR_HTTP_HEADERS_SENT) 获取 redis 键值对
问题描述
尝试使用 Node.js 从我的 localhost redis 客户端获取键值对。
如果我
res.json()
在函数/for 循环内部包含,我会收到多次发送响应的 HTTP_HEADER 错误。如果我在函数/循环之外定义它,我会得到一个空数组。
错误:
_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)
});
});
解决方案
你得到(ERR_HTTP_HEADERS_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)
});
});
推荐阅读
- ssis - Azure PAAS 服务器中的 SSIS 脚本任务错误:命名空间中不存在类型或命名空间名称“Office”
- ruby-on-rails - 如果 sidekiq 作业在 Rails 中处于死队列中,请重试它
- amazon-web-services - RDS 交换使用情况。多少交换是可以的
- javascript - 从 Polymer Dom 模块中的方法禁用选择标签的下拉列表不起作用
- typescript - 打字稿将模块导入一个内联js
- vb.net - 内置控件/功能以在表单关闭时清除文本输入
- python - 如何在数组中设置变量以进行多任务处理?
- keras - 为什么当我删除过滤器及其相关权重时 CNN 的准确性会下降?
- c# - 如何在不创建新 PDF 文件的情况下向现有 PDF 文件添加新文本
- jenkins - Openshift:用户“系统:服务帐户:
:jenkins" 无法创建 PV : RBAC: clusterrole.rbac.authorization.k8s.io "create" not found