2012-06-29 1 views
5

vhost 익스프레스/연결 미들웨어를 사용하고 있는데 어떻게 사용해야하는지 혼란 스럽습니다. 하나의 루트 집합을 하위 도메인이있는 호스트에 적용하고 다른 하나는 하위 도메인이없는 호스트에 적용하도록 설정하려고합니다.vhost 미들웨어를 사용하여 Express에서 하위 도메인별로 경로 지정

module.exports = function(subdomain){ 

    var app = express.createServer(); 

    require('./routes')(app, subdomain); 

    return app; 
} 

다음 routes.js에 내가 여부를 하위 도메인 변수에 따라 경로 세트를 실행할 계획 : 내 app.js 파일에서

, 나는

var app = express.createServer(); 

app.use...(middlware)... 
app.use(express.vhost('*.host', require('./domain_routing')("yes"))); 
app.use(express.vhost('host', require('./domain_routing')("no"))); 
app.use...(middlware)... 

app.listen(8000); 

다음 domain_routing.js에서이 건네받은 패스는 "yes" 또는 "no"입니다.

올바른 길을 가고 있습니까? 아니면이 미들웨어를 어떻게 사용하지 않습니까? 나는 두 개의 app 서버 인스턴스가 생성되고 있다는 사실에 다소 혼란 스럽다. (웹상의 예제가 그런 것처럼 보인다.) 대신 원래 app 서버 인스턴스를 전달하고 서브 도메인 라우터 대신 별도의 서버 인스턴스를 만드는 대신 사용해야합니까?

답변

2

예, 올바른 길을 가고 있습니다. 은 각각의 가상 호스트에 대해 다른 서버 인스턴스를 사용해야합니다. http.Server 또는 express app이 되십시오.

원래 app을 전달하면 가상 호스트로 보낸 요청이 원본 앱으로 전송됩니다. 따라서 원래 서버에서 사용되지 않는 경로가 가상 호스트에없는 경우 요청이 원래 서버로 전송 된 것처럼 응답을 받게됩니다. 연결 문서에서

connect() 
    .use(connect.vhost('foo.com', fooApp)) 
    .use(connect.vhost('bar.com', barApp)) 
    .use(connect.vhost('*.com', mainApp)) 
+0

감사합니다! 그리고 내 다른 질문은 원래 서버 인스턴스에 사용할 미들웨어를 지정한 다음 가상 호스트에 별도의 서버 인스턴스를 사용하면 원래 서버에 사용 된 미들웨어가 가상 호스트로 옮겨 질 것인가라는 것입니다. 아니면 원래 가상 서버에있는 가상 호스트 미들웨어를 제외하고는 가상 호스트에서만 독점적으로 미들웨어를 사용해야합니까? 기본적으로 모든 가상 호스트에서 동일한 미들웨어를 사용하지 않고 미들웨어를 사용할 수있는 완벽한 방법을 찾고 있습니다. 반복적 인 일종의 가상 호스트 중 하나입니다 ... – user730569

+0

아니요, 모든 가상 호스트에서 독점적으로 미들웨어를 사용할 필요는 없습니다. 유령이'.use''d가되기 전에 모든 응용 프로그램에 사용하려는 미들웨어는'.use' 될 수 있습니다. –

+0

그게 좋습니다! 그러나 호기심에서 어떻게 작동합니까? 나는'server.emit ("request", req, res);에 대해 약간 혼란 스럽다. – user730569