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

Posted

技术标签:

【中文标题】在同一端口上运行多个 Node (Express) 应用程序【英文标题】:Running multiple Node (Express) apps on same port 【发布时间】:2012-06-28 20:55:21 【问题描述】:

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

【问题讨论】:

How to mount express.js sub-apps? 的可能重复项 【参考方案1】:

你可以使用app.use():

app
  .use('/app1', require('./app1/index').app)
  .use('/app2', require('./app2/index').app)
  .listen(8080);

【讨论】:

如果我的 Node 应用程序是使用 Restify 制作的,这可能吗? 问我这个问题是否不够具体或不够清楚。 不,app.use() 特定于 express,并且不支持任何不遵循 express 插件调用模式的 HTTP 服务器。 我猜如果一个应用崩溃了,其他的也会崩溃。 如果没有像 Express.js 这样的第三方框架,最好的方法是什么?【参考方案2】:

您可以将它们作为单独的应用程序运行,监听不同的端口,然后根据请求的 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/)。正如 cmets 中所建议的那样,我并不热衷于将它们安装为子应用程序,因为我希望它们能够独立运行......

【讨论】:

首先,我不想设置多个虚拟主机。我想要它像 vhost/app1、vhost/app2、vhost/app3。其次,我尝试了您链接到的博客文章中的第二种方法,但它并不适合我,我不知道它是否适合我的用例。任何想法 ?哦,现在也不打算使用反向代理... 当然,您可以运行包装在一个应用程序中的子应用程序并在内部处理路由。我个人只是不喜欢我的应用程序在崩溃方面相互依赖。这就是为什么我更喜欢在不同的端口上运行它们。 你不必设置多个 vhost 来实现这一点 node-http-proxy ,我会用一个例子来更新答案 您能否说明如何使用“选项”变量? 显然选项中的router 已在不久前被删除。 blog.nodejitsu.com/node-http-proxy-1dot0【参考方案3】:

您可以创建一个与您的应用程序并行的主应用程序(例如应用程序),并使用

初始化辅助应用程序(在您的情况下为 app1、app2、app3)
app.use('<the_context_you_need>', require('./app1/yourApp.js')

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

var app = module.exports = express();

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

【讨论】:

以上是关于在同一端口上运行多个 Node (Express) 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Restify 在同一个端口上运行多个 Node 应用程序?

如何在同一个端口上运行 Node Express 服务器和 Angular?

Node.js - 在同一个端口上使用 Socket.io 和 Express

通过 Visual Studio 在同一端口上运行多个 IIS Express 实例

MERN Stack - Express 和 React 在同一个端口上?

如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?