Node.js Static File Server Logic (utilizzando il middleware Connect)
-
12-12-2019 - |
Domanda
Diciamo che ho la seguente struttura del filesystem:
/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
.
Il risultato finale è che admin/index.html
sarebbe simile a
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/screen.js"></script>
.
Cioè, sto caricando due file da diverse posizioni.Fondamentalmente, il pensiero qui è "Controllare se il file è in /share
, in caso contrario, prova a caricarlo dalla cartella in base alla porta" .
Ed ecco il codice corrente che sto 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?
PS: Questo sistema dovrebbe essere accessibile in tutto il mondo attraverso http://host/
(possibilmente un dominio o IP statico) e accessibile tramite la rete locale tramite http://host:90/
.
Mentre le cose sulla porta 90 non danneggeranno il sistema (è solo una schermata di uscita), preferirei se le persone non sarebbero in grado di accedervi dall'esterno (facilmente eseguibili garantendo che non ci sia un porto 90Router e server).
Soluzione
Connect Middleware è impilabile, in modo da poter ottenere il risultato desiderato semplicemente impilando tutti gli handler ricercati dopo l'altro. Public Server ottiene / Public e / share handlere admin ottiene il / admin e / share handlers.
Quindi la richiesta al server pubblico cercherà la risorsa in / Public Se non è stato trovato quindi la cartella nella cartella / Condividi .E il server di amministrazione lo fa allo stesso modo.
.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);