在单个包含服务器中隔离Node JS“apps”

时间:2017-09-25 16:05:22

标签: javascript node.js server

我的目标是尝试在节点js服务器的一个实例中拥有多个Node JS“apps”。例如,在传统的PHP托管中,您可以在www目录中放置不同的文件夹,这些文件夹将作为单独的路径。如果我将folder1和folder2作为子目录转到www.example.com/folder1或www.example.com/folder2将是他们自己的应用程序及其自己的index.html和所有内容。

使用Node JS它有点不同,因为您不是调用单个服务器端PHP脚本,而是调用正在运行的主服务器。使用socket.io之类的东西,你可以使用socket('on'...)和socket('emit'...)与服务器通信,而不是调用特定的脚本,而是与服务器通信。

我想尝试模仿Node JS中的PHP功能

这可能是一个示例文件结构:

main
|--sites
   |--site1
   |  |--index.js
   |  |--public
   |--site2
   |  |--index.js
   |  |--public
   |--landing
      |--index.js
      |--public
|--app.js

我认为app.js文件中包含所有路由。它会指定“/”是登陆文件夹,“/ site1”指向site1文件夹等。

然而,我想要的是,这些“应用程序”中的每一个都是孤立的。 index.js将是与该应用程序隔离的服务器。路由和该应用程序中的所有内容都将再次完成,就好像它是一个新的app.js,但它们不是单独的节点应用程序,只是子目录。

这可能吗?你能给我一些实施代码示例吗?

1 个答案:

答案 0 :(得分:1)

如果使用express,您只需创建多个express实例即可。然后将它们连接到主路由器。

例如

让我们说你有/app1/app.js

const express = require('express');

const app = new express();
app.get('/xyz'); //etc..

module.exports = app;

说另一个/app2/app.js,基本上有相同的......

然后,您可以创建主入口点,使其具有类似 - >

的内容
const app = new express();
app.use('/app1', require('./app1/app'));
app.use('/app2', require('./app2/app'));

在上面,对/app1/*的任何请求都会转到app1,而/app2/*会转到app2。