在同一端口上运行多个Node(Express)应用程序

时间:2012-06-27 12:16:26

标签: javascript node.js express

我有多个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

3 个答案:

答案 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;所有子应用程序都可以通过主应用程序监听端口提供。