2014-02-11 4 views
3

nodejs, express 및 node_redis으로 앱을 만들고 있습니다. 모든 redis 관련 작업을 캡슐화하여 어디에서나 redis 키를 다룰 필요가없는 모듈을 만들고 싶습니다.nodej에서 redis를 사용하는 가장 좋은 방법은 무엇입니까?

|- app.js 
|- models 
| |- db.js <-- All redis-related operations here 
..... 

여기에는 두 가지 문제점이 있습니다.

  1. 나는 레디 스 연결을 작성하고 데이터베이스를 선택합니다 : 어떻게이 별도의 모듈 (db.js)에서 사용할 수, select 이후

    var redis = require('redis'); 
    var client = redis.createClient(); 
    client.select(config.database, function() { 
        // actual db code 
    }); 
    

    는 비동기 호출입니다?

  2. 스크립트가 끝나기 전에 client.quite()을 호출해야합니다. 그렇지 않으면 스크립트가 종료되지 않습니다. db.jsclient이 로컬 변수로 캡슐화 된 상태에서 어떻게해야합니까?

답변

3

정의 된 인터페이스를 사용하여 서비스/저장소/인터페이스와 같은 것을 만들 것을 제안합니다. 예를 들어

, 당신은 사용자 DB가있는 경우 :

var UserService=function(){ 
    this.client=new ... 
} 

UserService.prototype.getUserById=function(id, cb){ 
this.client.select(...,function(result,err){ 
    cb(result); 
} 
} 

UserService.prototype.... so on 

는 이제 명시 응용 프로그램에서 당신은 UserService의 VAR를 생성하고 사용합니다. 물론, 더 똑똑한 UserService를 만들어야합니다. UserService에서 캐시를 추가 할 수 있습니다. 답에 대한 Do I need to quit

+0

감사 : 닫는

var app = express(); var userService = new UserService(); //... 

이 읽기. 나는 각 메소드에 클라이언트'select' 명령어를 두는 것이 좋은 생각이라고 생각하지만, 이것을 똑바로하면 메소드를 호출 할 때마다'select' 명령어가 실행됩니다. 아마 현재의 연결을 재사용 할 수있는 래퍼가 괜찮을 것입니다. – charlee

관련 문제