2012-09-06 6 views
0

코드 : app.jsExpressJS : redis가 다운되면 어떻게합니까? 문제

var redis = require('redis'); 
var redisClient = redis.createClient(); 
redisClient.on('error', function (err) { 
    console.error('There was an Error ' + err); 
}); 

// do stuff 

redisClient.quit(function(err, res) { 
    console.log('closing redis client.'); 
}); 

내 Node.js를 응용 프로그램에서 레디 스에 연결 node_redis를 사용하는 것을 시도하고있다. 그러나, 나는 Redis가 아래로있는 경우를 다루는 방법을 너무 확신하지 못합니다.

client.on('error', function(err) {})의 무리가 있지만 전화를받지 않은 것 같습니다. 그것은 그것을 처리하는 적절한 방법입니까? 내가 잘못 부른 거니?

방금 ​​redis/node/express를 사용하기 시작 했으므로 알려 주시기 바랍니다.

편집 바딤 나를 깨닫게 도움으로, 실제로 제대로 app.js.에 client.on('error')와 오류를 잡는 오전 보인다 그러나 redis가 다운되었을 때 오류를 잡을 수없는 것은 my routes입니다.

답변

0

node_redis가 비동기 적이기 때문에 redisClient으로 다른 명령을 보내기 전에 redisClient.on('error') 콜백이 호출되지 않습니다.

이 문제를 해결 한 방법은 redisClient.on('connect') 핸들러에 "success"코드를 넣는 것이 었습니다.이 코드는 redisClient가 성공적으로 연결된 후에 호출됩니다. 내 후퇴 코드는 redisClient.on('error')입니다.

이 문제를 해결하는 방법에 대한 자세한 내용은 in this github changeset을 참조하십시오.

0

나는 end 이벤트가 필요하다고 생각합니다.

설정된 Redis 서버 연결이 닫히면 클라이언트가 종료됩니다.

업데이트 :

것은 당신이 사용하는 경우 Node.js를> = 비동기 코드에서 오류를 잡기위한 domain module 기능을 사용할 수 있습니다 0.8.0.

익스프레스/연결 응용 프로그램에 connect-domain 모듈을 사용할 수 있습니다. 비동기 코드에서 오류를 던져 오류 처리기로 catch 할 수 있습니다.

+0

흥미롭게도 실제로 app.js의'client.on ('error')'오류를 제대로 잡아 냈습니다. 그러나 redis가 다운되면 오류를 잡을 수없는 [내 경로] (https://github.com/achan/didgomezscore/blob/master/routes/index.js). 어떤 아이디어? – achan

+0

답변 확인을 확인하십시오. –