Lógica del servidor de archivos estáticos Node.js (con Connect middleware)

Digamos que tengo la siguiente estructura de sistema de archivos:

/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 

El resultado final es que admin/index.html se vería así:

   

Es decir, estoy cargando dos archivos de diferentes ubicaciones. Básicamente, el pensamiento aquí es “verificar si el archivo está en /share , si no, intente cargarlo desde la carpeta de acuerdo con el puerto” .

Y aquí está el código actual que estoy usando:

 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? 

PD: este sistema debe ser accesible a nivel mundial a través de http://host/ (posiblemente un dominio o ip estático) Y accesible a través de la red local a través de http://host:90/ .

Si bien las cosas en el puerto 90 no dañarán el sistema (es solo una pantalla de salida), preferiría que la gente no pudiera acceder a él desde el exterior (esto se hace fácilmente asegurándose de que no haya reenvío del puerto 90 entre el enrutador y el servidor ).

Connect middleware es astackble, por lo que puede lograr el resultado deseado simplemente astackndo todos los controladores deseados uno tras otro. El servidor público obtiene los controladores / public y / share y el administrador obtiene los controladores / admin y / share .

Entonces, la solicitud al servidor público buscará el recurso en la carpeta / pública si no se encuentra allí, luego busque en la carpeta / compartir . Y el servidor de administración lo hace de manera similar.

 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);