如何将两个Node.js App服务器组合在一起。

时间:2011-07-28 22:56:45

标签: node.js express

我有两个应用程序。哪个电流在两个不同的端口运行。

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。 它需要script1和script2。

但问题是,我应该从脚本1和脚本2导出什么?我应该:

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

在script80.js中,我应该这样做:

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

MMMM

2 个答案:

答案 0 :(得分: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 :(得分:5)

您可以在端口80上使用nginx侦听,并将代理流量反向代理到其后面的2个不同的快速应用服务器。

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

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

您也可以在快递中手动编码,但是为什么重新发明轮子?