在同一端口上运行多个 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 实例