2017-09-25 58 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似乎會實現我想要的。謝謝 :) –