2011-07-28 51 views
3

我有兩個應用程序。目前運行在兩個不同的端口。如何將兩個Node.js應用程序服務器組合在一起。

script1.js:

var express = require('express'), 
    app = require('express').createServer(

     express.cookieParser(), 
      // Parses x-www-form-urlencoded request bodies (and json) 
      express.bodyParser() 
    ) 
    ; 

app.get('/s1/output', function(sReq, sRes){ 
    // set cookie 

    sRes.send('<div>Out from 1!</div>'); 
}); 

app.listen(3000);

,這裏是script2.js

var express = require('express'), 
    app = require('express').createServer(

     express.cookieParser(), 
      // Parses x-www-form-urlencoded request bodies (and json) 
      express.bodyParser() 
    ) 
    ; 

app.get('/s2/output', function(sReq, sRes){ 
    // set cookie 

    sRes.send('<div>Out from 2!</div>'); 
}); 
app.listen(3001); 

確定..它分別運行在兩個不同的端口,並沒有問題。

現在。故事是,我只能使用80端口進行生產。系統管理員不想打開3000或其他端口。

而不是合併代碼。 (實際上,我的真實代碼非常多,並且對於script1和script2有不同的配置設置),我可以怎樣在端口80上創建它們?但是調用/ s1/output會轉到script1,並且/ s2/output會轉到script2?

我在考慮製作其他腳本。在端口80上運行的script80.js。 並且它需要腳本1和腳本2。

但問題是,我應該從腳本1和腳本2導出什麼?我應該:

define all get/post methods, and then, 
module.exports.app =app? 

和script80.js,應該怎麼辦soemthing這樣的:

app.get('/s1/*', function (res, req)) { 
    // and what do now? app1(res) ? 
} 

MMMM

回答

15

如果有域或指向該服務器的子域,您還可以使用vhost中間件:

app.use(express.vhost('s1.domain.com', require('s1').app)); 
app.use(express.vhost('s2.domain.com', require('s2').app)); 

app.listen(80); 

完整的示例:https://github.com/visionmedia/express/blob/master/examples/vhost/app.js

+1

更新網址:https://github.com/visionmedia/快遞/斑點/主/示例/虛擬主機/ index.js –

5

您可以使用nginx的偵聽端口80和反向代理流量的2背後有不同的快遞應用服務器。

location /s1/ { 
    rewrite /s1(.*) $1 break; 
    proxy_pass http://localhost:3000; 
} 

location /s2/ { 
    rewrite /s2(.*) $1 break; 
    proxy_pass http://localhost:3001; 
} 

你也可以在你問的時候用手工表示,但爲什麼要重新發明輪子?

相關問題