我有两个应用程序。哪个电流在两个不同的端口运行。
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
答案 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;
}
您也可以在快递中手动编码,但是为什么重新发明轮子?