用下列代码,显示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(); });
就我所知,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 谢谢指教,以后会好好努力。