2012-05-06 2 views
2

모든 라우팅 구성을 단일 개체로 간단하게 설정할 수 있습니까? 기본적으로 내가하고 싶은 것은 모든 경로가 포함 된 객체를 내보내는 routing.js 파일입니다. 모든 경로에 대해 express.get()을 사용하는 것은 평범한 일입니다.expressjs 라우팅 구성 객체?

답변

2

사실 내 경로에 대한 모든 파일을 보유하는 폴더가 있습니다 (개체별로 분할했습니다). 또한 컨트롤러를 파일로 분리합니다. 경로 파일은 다음과 같이 :

fs.readdir(__dirname + '/routes', function (err, files) { 
    if (err) throw err; 
    files.forEach(function (file) { 
    require('./routes/' + file)(app); 
    }); 

    /** 
    * 500 page. 
    */ 
    app.use(function (err, req, res, next) { 

    if (err && err.status === 404) { 
     return next(); 
    } 

    res.statusCode = 500; 
    res.render('404.html', {status: 500, url: req.url, error: ': ' + err.message}); 
    }); 

    /** 
    * 404 page. 
    */ 
    app.use(function (req, res, next) { 
    res.statusCode = 404; 
    res.render('404.html', {status: 404, url: req.url}); 
    }); 
}); 

경우 :

내 app.js에서 다음
/** 
* Module dependencies. 
*/ 
var controller = require('../controllers/index'); 

/** 
* The API root for this object. 
*/ 

var root = '/'; 

/** 
* Route definitions. 
*/ 
var routes = function (app) { 

    // get index 
    app.get(root, controller.getIndex); 
}; 

/** 
* Exports. 
*/ 
module.exports = routes; 

내가 자동으로 내 경로의 모든 파일을로드하고 (500) 및 (404) 경로를 구성하는이 작업을 수행 할 파일

require('./routes/' + file)(app); 

이전에 정의 된 경로를 사용할 수 있습니다 :이 같은 파일에서 읽을 수 없다, 수입 부분이 라인입니다.

정확하게 생성 된 경로를 제어하기 위해이 방법을 사용합니다. 프로세스를 자동화하려면 https://github.com/visionmedia/express-resource을 사용할 수 있습니다.

GET  /forums    -> index 
GET  /forums/new   -> new 
POST /forums    -> create 
GET  /forums/:forum  -> show 
GET  /forums/:forum/edit -> edit 
PUT  /forums/:forum  -> update 
DELETE /forums/:forum  -> destroy 

당신이 뭔가 더 간단, 당신은 할 수 원하는 경우 :

var express = require('express'), 
    Resource = require('express-resource'), 
    app = express.createServer(); 

app.resource('forums', require('./forum')); 

자동으로 ./forum에 다음과 같은 기능을 가리 키 경로를 만들려면 :

이 당신이 할 수 있습니다 이렇게 ...

var getRoutes = [['/', controller.index], ['/post', controller.showPost]]; 

for (var i = 0, len= getRoutes.length; i < len; i++) { 
    var path = getRoutes[i][0]; 
    var controller = getRoutes[i][1]; 
    app.get(path, controller); 
} 
+0

이것은 좋지만 { '/', controller.index}와 같은 것을 찾고 있습니다. – LordZardeck

+0

경로에 미들웨어를 추가하기 시작하면 곧 제한 될 것입니다. 게다가'get','post','update' 및'del'을 구별해야합니다. 그래서 당신은'app.post ('/', controller.index)'에서'{ 'post', '/', controller.index}'와 헬퍼 코드로 이동하려고합니다. 나는 경로를 등록 할 간단한 도우미를 포함하도록 내 응답을 업데이트했습니다. – Bill

+0

기본적으로 그렇게하고 싶다면 기본적으로 통역사를 만들어야합니다. Express에는 기본 제공 기능이 없습니다. – LordZardeck