2014-11-20 4 views
0

여러 개의 라우터를 사용하는 ExpressJS 애플리케이션이 있습니다. 모든 것을 하나로 묶는 기본 앱의 기본 형식입니다.Express 라우터 내의 Express Express 앱

var express = require('express'); 
var routes = require('./routes/index'); 

var app = express(); 
app.set('someKey', someObj); 


app.use('/', routes); 

module.exports = app; 

나는 간결함을 위해 대부분의 코드를 제거했다. 나는 라우터 내부에서 "somekey"에 접근하려면 다음을 사용하려고했습니다

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res) { 
    res.render('index', { title: 'Express Test' }); 
}); 

module.exports = router; 

: 그에서

내가 형태로 고속 라우터를 정의한 파일을 ./routes/index.js

런타임과 함께 충돌하고 화상을 입어 앱에 대한 접근 방법이 없다는 것을 알려줍니다 (자세한 조사 결과 앱은 기본 객체 임).

나는 완전히 명백한 것을 간과하고 있다고 가정합니다.

하나의 knexjs 개체를 데이터베이스 호출을 처리하는 라우터 각각에 전달할 계획입니다. 코드의 현재 상태에서는 각 라우터에 복제됩니다. 나는 그것을 주 앱에서 한 번 정의한 다음 모든 라우터에서 변경하여 주 앱에서 변경된 사항이 라우터 전체에 반영되도록하고 싶습니다.

답변

2

그런 식으로 app이 필요하면 정확하게 에서 정의한 앱 개체를 언급하지 않은 것입니다. 대신, 당신은 그 파일이 수출 된 것을 요구하고 있습니다. 달성하고자하는 것을 얻으려면 이와 같은 것을 사용할 수 있습니다. 당신의 app.js 당신의 경로에

다음
var express = require('express'); 
var app = express(); // Note the switched order 

app.set('someKey', someObj); 

var routes = require('./routes/index')(app); 
app.use('/', routes); 

module.exports = app; 

에서

:

기본적으로
var express = require('express'); 
var router = express.Router(); 

/* Wrap everything inside a function */ 
module.exports = function(app){ 

    console.log(app.get('someKey')); // Access app passed to it from app.js 

    /* Declare all your routes here. app variable will be accessible */ 
    router.get('/', function(req, res) { 
     res.render('index', { title: 'Express Test' }); 
    }); 

    return router; 
}; 

, 당신은에서 파일 B를 필요로하고 A에서 B로 변수를 전달 할 때마다, 이것은 당신이 따라하는 일반적인 패턴입니다.

도움이 될지 확인하십시오. :)

관련 문제