及昨天的工作,正在写一个redis的业务操作模块。RedisManager。过程是 先从一个Set里查出所有 openId 然后循环查出 openId对应的User对象。
代码如下:
var EventProxy = require('eventproxy');
var client = require('./RDB');
function RedisManager(){}
module.exports = RedisManager;
/**
* 根据openid获得用户Hash
* @param openid
* @param callback
*/
RedisManager.getUserByOpenId = function getUserByOpenId(openId, callback){
client.auth('aFu1hvCV5ks1G9jjx5J8');
console.log('OpenId--'+openId);
var key = 'user:'+openId+':id';
client.get(key, function (err, obj) {
if(err)
throw err;
var userId = obj;
console.log('UserId--'+userId);
RedisManager.getUserByid(userId, callback);
});
}
/**
* 根据userid获取用户Hash
* @param id
* @param callback
*/
RedisManager.getUserByid = function getUserByid(id, callback){
getUserByid(id, callback);
}
/**
* getUserByid
* @param id
* @param callback
*/
function getUserByid(id, callback){
var key = 'user:'+id;
console.log('User by Id--'+key);
client.hgetall(key, function (err, obj) {
if(err)
console.log(err);
console.log('get User by Id--'+obj);
callback(err, obj);
});
}
杯具来了。。。字面翻译:rangeerror:最大调用堆栈大小超过
RangeError: Maximum call stack size exceeded
不会吧。。。我没做什么递归操作啊,最多就是回调多了几层,不过在node里很常见啊。于是百度之。发现了如下一片文章
http://blog.csdn.net/vean_system/article/details/7799232
没怎么看懂的说....不过初步认定好像是 方法调用有问题。这时突然发现,这个方法是调用了一个同名本地方法getUserByid,难道是这个问题引起的?
RedisManager.getUserByid = function getUserByid(id, callback){
getUserByid(id, callback);
}
尝试把getUserByid方法直接写在 类的导出方法中,居然运行通过了~看来果然是这样,不过javascript功底有限,还不清楚到底为什么会出现这种情况。
RedisManager.getUserByid = function getUserByid(id, callback){
var key = 'user:'+id;
console.log('User by Id--'+key);
client.hgetall(key, function (err, obj) {
if(err)
console.log(err);
console.log('get User by Id--'+obj);
callback(err, obj);
});
}
有待分析。。。
