2012-12-17 5 views
0

내가 node.js. 위에 express.js를 사용하여 간단한 웹 서버를 만들고 있어요Node.js : 모듈 상속을 수행하는 올바른 방법은 무엇입니까?

배경 내 서버를위한 경로 처리기를 만들 때 필연적으로 몇 가지 일반적인 기능을 제외해야합니다. 그래서 DB 연결과 같은 모든 공통 처리기 기능을 가진 baseHandler를 만들고 싶습니다. 다른 경로 처리기를 작성할 때 baseHandler를 손쉽게 확장하여 일반적인 처리기 기능을 얻고 싶습니다.

내가 노력하고 무엇

그것을 달성하는 방법은 무엇이며, 그렇게 할 수있는 올바른 방법은 무엇입니까? 꽤 간단한 솔루션을 시도하고 있는데, baseHandler를 일반적인 핸들러 모듈로 작성하고 로컬 mysql 인스턴스를 가지고 데이터베이스를 조작하는 함수를 내 보냅니다. 아래 코드 :

// Mysql 
var _mysql = require('mysql'); 

// Mysql connection 
exports.getDbHandle = function() { 
    var mysql = _mysql.createConnection({ 
    host: xxx 
    port: xxx 
    user: xxx 
    password: xxx 
    database: xxx 
}); 
return mysql; 
}; 

내 경로 처리기에서이 모듈을 요구하고 기능을 사용하면됩니다. 이것은 문제를 해결하는 것으로 보이지만, 나는 그것이 올바른 방법이 아니라고 생각합니다. 내 경로 처리기에서 baseHandler 모듈의 인스턴스를 갖게되며 자체적으로 경로 처리기의 일부가 아니라 유틸리티 모듈처럼 느껴집니다.

질문

그래서 nodejs에서 모듈을 확장하는 올바른 방법은 무엇입니까?

답변

3

클래스 계층 구조를 만드는 대신 해당 기능을 필요로하는 경로에 연결할 수있는 공통 기능을 미들웨어에 넣으십시오. 이를 통해 기능을 독립적 인 구성 요소로 완전히 분리 할 수 ​​있습니다. 미들웨어는 데이터베이스 연결을 req 요청 개체의 속성으로 추가하여 경로에서 사용할 수 있도록 할 수 있습니다.

+0

답변 해 주셔서 감사합니다.하지만 읽은 후에 더 많은 질문이 있습니다. Node.js의 초보자입니다. 답변을 완전히 이해할 수없는 것 같습니다. 미들웨어를 경로에 연결하는 방법에 대해 자세히 설명해 주시겠습니까? 요청 개체에 속성을 추가하려면 어떻게해야합니까? 전체 흐름은 무엇입니까? –

+1

@Xavier_Ex 경로 미들웨어 주제에 대해 [이 블로그 게시물] (https://blog.caurea.org/2011/11/05/express-route-middleware-chains.html)을보십시오. CoffeeScript 예제 코드를 사용하지만 익숙하지 않더라도 그 요점을 파악할 수 있어야합니다. – JohnnyHK

+0

감사합니다. 먼저 그것에 대해 조금 읽을 것입니다. –

관련 문제