59

我有多个 Node 应用程序(基于 Express 框架构建)。

现在我把它们像这样放置 -

  • /var/www/app1
  • /var/www/app2
  • /var/www/app3

现在我想在同一个端口(比如 8080)上运行这 3 个应用程序。那可能吗 ?

需要注意的一件事是,每个应用程序都有这样的共同路线 -

  • 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
4

3 回答 3

65

您可以使用app.use()

app
  .use('/app1', require('./app1/index').app)
  .use('/app2', require('./app2/index').app)
  .listen(8080);
于 2012-06-27T14:44:02.170 回答
36

您可以将它们作为单独的应用程序运行,监听不同的端口,然后根据请求的 URL使用代理(如https://github.com/nodejitsu/node-http-proxy/ )为 8080 上的所有内容提供服务。

喜欢:

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/)。正如评论中所建议的那样,我并不热衷于将它们安装为子应用程序,因为我希望它们独立运行......

于 2012-06-27T12:30:48.050 回答
0

您可以创建一个与您的应用程序并行的主应用程序(例如应用程序),并使用它初始化辅助应用程序(在您的情况下为 app1、app2、app3)

app.use('<the_context_you_need>', require('./app1/yourApp.js')

您所有的应用程序(app1、app2、app3)都需要创建应用程序并使用

var app = module.exports = express();

您无需在所有子应用中创建服务器实例或调用 app.listen;所有子应用程序都可以通过主应用程序侦听端口提供服务。

于 2017-05-28T14:26:39.137 回答