我有多个Node应用程序(基于Express框架构建)。
现在我把它们放在这样 -
/var/www/app1
/var/www/app2
/var/www/app3
现在我想在同一个端口上运行这3个应用程序(例如8080)。这可能吗?
有一点需要注意的是,每个应用都有这样的常见路线 -
app.get('/', func...);
app.get('/about', func...);
app.post('/foo', func...);
app.post('/bar', func...);
基本上我想像你可以用Apache / PHP设置那样做。
当你有一个LAMP堆栈时 -
/var/www/app1
/var/www/app2
/var/www/app3
您可以轻松地将其作为不同的应用来访问 -
localhost/app1
localhost/app2
localhost/app3
答案 0 :(得分:55)
您可以使用app.use()
:
app
.use('/app1', require('./app1/index').app)
.use('/app2', require('./app2/index').app)
.listen(8080);
答案 1 :(得分:28)
您可以将它们作为单独的应用程序运行,侦听不同的端口,然后让代理(如https://github.com/nodejitsu/node-http-proxy/)为8080上的所有内容提供服务,具体取决于请求的URL。
像:
var options = {
router: {
'foo.com/baz': '127.0.0.1:8001',
'foo.com/buz': '127.0.0.1:8002',
'bar.com/buz': '127.0.0.1:8003'
}
};
对我来说就像魅力一样(http://nerdpress.org/2012/04/20/hosting-multiple-express-node-js-apps-on-port-80/)。我并不热衷于将它们作为子应用程序挂载,正如评论中所建议的那样,因为我希望它们能够独立运行......
答案 2 :(得分:0)
您可以创建一个与您的应用程序平行的主应用程序(比如应用程序),并使用app.use初始化辅助应用程序(在您的情况下为app1,app2,app3)('',要求(' ./ APP1 / yourApp.js&#39)。
您的所有应用(app1,app2,app3)都需要创建应用并使用导出它 var app = module.exports = express(); 您无需在所有子应用程序中创建服务器实例或调用app.listen;所有子应用程序都可以通过主应用程序监听端口提供。