redis中的lrange命令返回值问题
发布于 12 年前 作者 danfengchaoxi 12969 次浏览 最后一次编辑是 8 年前

用下列代码,显示undefined,为什么呢 想实现对读出的data进行from,to,msg的控制,怎么修改

var redis = require(‘redis’); rc = redis.createClient(); rc.on(‘error’, function (err) { console.log('Redis error ’ + err); }); var from = ‘sdd’; var to = ‘wmh’; var Str = {from:from, to:to,msg:“hello”};

for (var i = 0, len = 4; i < len; i++) { rc.rpush(‘test:case’,Str); }

rc.lrange(‘test:case’, 0, -1, function (err, data) { console.log(data.from); rc.end(); });

7 回复

就我所知,redis的list类型只支持string,但Str很明显是Object。要按这个需求做,只能通过JSON作encode/decode。 保存:rc.rpush('test:case',JSON.stringify(Str));
取出:console.log(JSON.parse(data).from);

嫌JSON麻烦,非要以Object来保存Str,可以考虑redis的hash类型,但要达到同样的效果就不是一个回帖的篇幅能摆平的了。

谢谢提醒。不过用console.log(JSON.parse(data).from);进行取出时出现语法错误

@danfengchaoxi 语法错误是因为你之前存进去那些有问题的Str。取出时,console.log(data)就知道怎么回事了,应该有部分输出是Object Object。先把test:case这个key里面的值全清了,再测试。

@shiedman 清过了还是有问题,是JSON.parse(data).from的问题。 显示: SyntaxError:Unexpected token , at Object.parse(native) ……

应该是格式问题,但还不知道哪里出了问题

@shiedman 把rc.lrange(‘test:case’, 0, -1, function (err, data) {改成rc.lrange(‘test:case’, 0,0, function (err, data) {就没有错误了。估计是上句返回的结果是多个对象。

@danfengchaoxi 同学,英文水平和调错能力有待加强啊。。。。。。 SyntaxError都出来了,还不知道哪出了问题,请google吧。。。。。 另外我上面console.log(JSON.parse(data).from);并不正确,正确应该是

rc.lrange('test:case', 0, -1, function (err, data) {
     for(var i=0;i<data.length;i++){
         console.log(JSON.parse(data[i]).from);
     }
     rc.end();
});

如果有console.log(data)查看输出信息,就知道data是个数组,稍微变通下即可。

@shiedman 谢谢指教,以后会好好努力。

回到顶部