2013-11-28 2 views
0

다음 코드의 수정 설정 값을 취득하는 것은 오류를 제공합니다 : -레디 스가 : - 키

redisClient.get('aKey', function(err, aValue){ 
    //some operations. 
    redisClient.set('aKey', aDashValue, function(err){ 
    if(err){ throw err }; 
     console.log('redisClient set sessionKey'); 
    }); 
}); 

내가 노력하고 있어요 : - 1. 가져 오기 키의 값입니다. 2. 값 수정 3. 값 설정. 이 3 단계는 연속적으로 수행되어야합니다.

편집 :

SyntaxError: Unexpected token u 
    at Object.parse (native) 
    at /Users/apple/Documents/herokuApp/node_modules/connect-redis/lib/connect-redis.js:97:23 
    at try_callback (/Users/apple/Documents/herokuApp/node_modules/redis/index.js:580:9) 
    at RedisClient.return_reply (/Users/apple/Documents/herokuApp/node_modules/redis/index.js:670:13) 
    at ReplyParser.<anonymous> (/Users/apple/Documents/herokuApp/node_modules/redis/index.js:312:14) 
    at ReplyParse 
+0

오류는 ...? –

+0

편집에 넣습니다. 오류의 의미를 따라갈 수 없습니다. 명령 문제의 동행이 있습니다. –

+0

"오류 발생"처리기로 처리 할 수없는 코드로 예외가 있다고 생각합니다. 나는 "if (err) {throw err};"을 제거 할 것입니다. " 콘솔에 err을 표시하십시오. –

답변

0

SyntaxError: Unexpected token u 당신이 실행하려는 의미

JSON.parse(undefined) 
> SyntaxError: Unexpected token u 

"을 aValue는"귀하의 경우 undefined를 반환하기 때문이다. 가장 좋은 방법은 HASH 대신 STRING을 사용하는 것이 여전히 그러나

/** 
* ChangeKeyValue 
* @param {Object} redis redis client 
* @param {String} key key name 
* @param {Function} fChanger(oldValue) -> {Object} change the attributes and returns an object 
* @param {Function} f(err, replies) callback once done or on error) 
*/ 
function changeKeyValue(redis, key, fChanger, f) { 
    redis.watch(key, function(){ 

    redis.get(key, function(err, jsonStr) { 
     var json; 

     if (err) { 
     return f(err) 
     } else if(!jsonStr){ 
     return f(new Error("Key value is empty")); 
     } 

     try{ 
     json = JSON.parse(avalue); 
     } catch(err){ 
     return f(err); 
     } 

     redis 
     .multi() 
     .set(key, JSON.stringify(fChanger(json))) 
     .exec(f); 
    }); 
    }); 
} 

// Usage 
changeKeyValue(redis, 'aKey', function(value){ 
    value.attr1 = "myNewValue"; 
    value.attr2++; 
    return value; 
}, function(err, replies){ 
    if(err){ throw err }; 
    console.log('redisClient set sessionKey'); 
}); 

:

redisClient.get('aKey', function(err, aValue){ 
    if(err){ throw err }; 
    var aDashValue = JSON.parse(avalue); 
    // change a value 
    aDashValue.attr = true; 
    redisClient.set('aKey', JSON.stringify(aDashValue), function(err){ 
    if(err){ throw err }; 
     console.log('redisClient set sessionKey'); 
    }); 
}); 

그래서 더 일반적인 방법은 다음과 같습니다 당신이 그것을 지정하지 않았더라도 난 당신의 코드가 같은 것을 것을 추론 특히 JSON.parse/stringify를 사용하여 속성을 증가시키는 경우.

관련 문제