2012-10-02 20 views
1

比方說,我有以下文件系統結構:Node.js的靜態文件服務器邏輯(使用連接中間件)

/app/   Main application folder 
    /app.js  Server JS file ran by node.js 
    /public  Folder containing files for public website (port 80) 
    /index.html 
    /js/ 
     /game.js 
    /admin/  Folder containing files used by local network system (port X) 
    /index.html 
    /js/ 
     /screen.js 
    /share/  Folder containing files to be used by public website OR lan 
    /js/ 
     /jquery.js 

最終的結果是,admin/index.html會是什麼樣子:

<script type="text/javascript" src="/js/jquery.js"></script> 
<script type="text/javascript" src="/js/screen.js"></script> 

也就是說,我從不同位置加載兩個文件。基本上,這裏的想法是「檢查文件是否在/share,如果不是,請嘗試根據端口」「從文件夾加載它。

下面是當前代碼我使用:

var connect = require('connect'), 
    sourcePublic = connect().use(
     connect.static(__dirname + '/public', { maxAge: 86400000 }) 
    ), 
    sourceAdmin = connect().use(
     connect.static(__dirname + '/admin', { maxAge: 86400000 }) 
    ), 
    sourceShare = connect().use(
     connect.static(__dirname + '/share', { maxAge: 86400000 }) 
    ), 
    serverPublic = http.createServer(sourcePublic).listen(80), 
    serverAdmin = http.createServer(sourceAdmin).listen(90); 
// ok, how do I use sourceShare? 

PS:該系統應通過通過http://host:90/本地網絡是全球訪問通過http://host/(可能是一個域或靜態IP)和訪問。

儘管端口90上的東西不會損害系統(它只是一個輸出屏幕),但我寧願如果人們無法從外部訪問它(通過確保不存在端口90轉發在路由器和服務器之間)。

回答

2

連接中間件是可堆疊的,所以你可以通過簡單地堆疊所有想要的處理器的每個other.Public服務器收到後/公共/股處理程序和管理得到/管理並達到想要的結果/份處理程序。

所以請求公共服務器將搜索資源下/公共文件夾,如果沒有找到,然後在/股文件夾進行搜索。和管理服務器一樣。

var connect = require('connect'), 
    sourcePublic = connect().use(
     connect.static(__dirname + '/public', { maxAge: 86400000 }) 
    ).use(
     connect.static(__dirname + '/share', { maxAge: 86400000 }) 
    ), 
    sourceAdmin = connect().use(
     connect.static(__dirname + '/admin', { maxAge: 86400000 }) 
    ).use(
     connect.static(__dirname + '/share', { maxAge: 86400000 }) 
    ), 
    serverPublic = http.createServer(sourcePublic).listen(80), 
    serverAdmin = http.createServer(sourceAdmin).listen(90); 
+0

可愛。我知道「使用()」比使用眼睛還要多。看起來蒂姆在這裏做得很好。 – Christian

+0

最後一個問題,所以堆棧首先處理底部,是否正確? – Christian

+0

不,它從上往下工作......所以你首先「使用」的那個將首先得到invoced。 – DeadAlready

相關問題