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

mur*_*lai 3 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>');
});
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

好吧..它在两个不同的端口上单独运行,没有问题.

现在.故事是,我只能使用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?
Run Code Online (Sandbox Code Playgroud)

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

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

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);
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ons 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;
}
Run Code Online (Sandbox Code Playgroud)

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