2013-10-09 15 views
3

학습 연습으로 node.js에 라우터를 만들려고합니다. 이것은 재사용이 가능합니다. 내 라우터의 파일 구조는 다음과 같습니다Node.js : require() 및 MODULE_NOT_FOUND

  • /MyProject를
    • /경로
      • 하는 index.js
      • about.js
      • 을 app.js
    • /모듈
      • /rout 어
        • router.js app.js에서

, 나는 라우터 개체를 만들고, 내 루트 폴더에에게 경로를 전달합니다

var Router = require('./modules/router/router'); 
var router = new Router('./routes'); 

라우터 객체의 생성자 내에서 객체에 전달 된 경로에서 파일 이름을 배열에로드하고 객체에 객체를 추가하려고합니다 요법 모듈로 :

var fs = require('fs'); 
var routes = {} 
var routesFolder; 

function Router(routesPath){ 
    this.routesFolder = routesPath; 
    fs.readdir(this.routesFolder, this.loadRoutes); 
} 

Router.prototype.loadRoutes(err, files){ 
    for (var i=0;i<files.length;i++){ 
     var c = files[i].split('.'); 
     if(c[1] === 'js'){ 
      try{ 
       var t = require(routesFolder + '/' + c[0]); 
       routes['/' + c[0]] = t[c[0]]; 
      } 
      catch(err){ 
       console.log('Error parsing file: ' + files[i]; 
       console.log(err); 
      } 
     } 
    } 
} 

내하는 index.js 및 about.js 파일은 다음과 같이 : 나는 실행

exports.index = function(req, res){ 
    // Some code here 
} 

''노드는 app.js ', 나는 라우터 개체를 전달 ./ routes '를 경로 경로로 사용합니다. 파일 이름은 잘로드,하지만 내 콘솔 출력은 : 나는 몇 가지 다른 방법으로 내 루트 파일을 변경하려고했습니다

Error parsing: index.js 
{ [Error: Cannot find module './routes/index'] code: 'MODULE_NOT_FOUND' } 
Error parsing: about.js 
{ [Error: Cannot find module './routes/about'] code: 'MODULE_NOT_FOUND' } 

:

module.exports = function(){...} 
module.exports.index = function(){...} 

하지만이 효과가 없습니다. 노드에 대해 이해하고 필요로하는 것부터 시작해야합니다. 나는 약간의 초보자이기 때문에 만약이 문제가 어리석은 것이라면 용서해주십시오.

답변

7

당신은 당신의 routes 폴더에 대한 절대 경로를 사용한다 :

var path = require("path"); 
var Router = require('./modules/router/router'); 
var router = new Router(path.join(__dirname,'routes')); 

나는 무슨 일이 일어나고 것은 fs.readdirapp.js하지만 require()의 디렉토리입니다 process.cwd를 사용하여 항상 현재 스크립트의 위치를 ​​사용하는 것을 생각 상대 경로를 확인할 때 /myProject/modules/router/routes/index.js과 같은 파일을 찾습니다.

+0

해결했습니다. 나는이 문제가 경로 참조와 관련이 있다고 추측했지만, 나는 그 둘 모두가 동일한 방식으로 처리 된 참조를 요구한다고 가정하고 있었다. – aerook