2017-09-25 61 views
0

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

使用Node JS它有点不同,因为不是调用单独的服务器端PHP脚本,而是调用正在运行的主服务器。有了像socket.io这样的东西,你可以使用套接字('on'...)和套接字('emit'...)与服务器进行通信,而不是调用特定的脚本,而是与服务器通信。

我想尝试节点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一样,但它们不是单独的节点应用程序,只是子目录。

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

+0

当你说应用程序时,你是指快递。如果是这样,在你的路线上,你只需创建另一个快速应用程序,并将其附加到路线。 – Keith

+0

你可以通过在你的节点应用前面放置一个代理来实现这一点,然后代理可以根据主机名或头部等信息将流量发送到正确的主机/端口。 – Aknosis

+0

@Keith你可以详细说明一下吗?像这样: 'app.use('/ firstsite',require('./ sites/firstsite'))'? 这些文件夹中的每个文件夹中的index.js文件是否充当该应用程序的独立服务器,还是试图与app.js通信?你能回答一些示例代码吗? –

回答

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。

+0

太棒了! IT似乎会实现我想要的。谢谢 :) –