Risposte:
È inoltre possibile impostare il percorso da cui verranno pubblicati i file statici sul Web specificando un (primo) parametro aggiuntivo in questo use()modo:
app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));
In questo modo si ottengono due directory diverse sul Web che rispecchiano le directory locali, non un percorso URL che esegue il failover tra due directory locali.
In altre parole, il pattern URL:
http://your.server.com/public/*
Fornisce file dalla directory locale publicmentre:
http://your.server.com/public2/*
Fornisce file dalla directory locale public2.
A proposito, questo è anche utile se non vuoi che static serva i file dalla radice del tuo server ma piuttosto da un percorso più qualificato.
HTH
"homepage": "/public"e "homepage": "/public2"al package.json della rispettiva app react. Per maggiori informazioni sull'utilizzo di due app di reazione, vedere la mia risposta qui stackoverflow.com/a/48569896/4746648
sharedcartella in modo che è possibile utilizzare "./"e "./shared"e boma si può facilmente js di condivisione file: 3 Thank You
Puoi anche "unire" directory in un'unica directory visibile
Struttura delle directory
/static/alternate_staticCodice
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
Sia static che alternate_static verranno serviti come se fossero nella stessa directory. Attenzione però ai clobbers dei nomi dei file.
main.jsdentro static/, non continuerà a guardare dentro alternate_static/.
alternate_staticvenisse mai servito.
Non è possibile tramite un'iniezione di middleware, ma puoi iniettare il staticmiddleware più volte:
app.configure('development', function(){
app.use(express.static(__dirname + '/public1'));
app.use(express.static(__dirname + '/public2'));
});
Spiegazione
Guarda connect / lib / middleware / static.js # 143 :
path = normalize(join(root, path));
C'è options.rootuna radice statica, che definisci express.statico connect.staticchiami, ed pathè il percorso della richiesta.
Guarda di più su connect / lib / middleware / static.js # 154 :
fs.stat(path, function(err, stat){
// ignore ENOENT
if (err) {
if (fn) return fn(err);
return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
? next()
: next(err);
Il percorso è stato verificato solo una volta e, se il file non è stato trovato, la richiesta è passata al middleware successivo.
Aggiornamento per Connect 2.x
I collegamenti al codice non sono effettivi per Connect 2.x, ma è ancora possibile utilizzare più middleware statico come prima.
const express = require('express');
const path = require('path');
const pagesPath = path.join(__dirname, '/cheatsheet');
const cssPath = path.join(__dirname, '/stylesheet');
const port = process.env.PORT || 3000;
var app = express();
app.use("/cheatsheet" ,express.static(pagesPath));
app.use("/stylesheet",express.static(cssPath));
app.get('/',(request,response)=>{
response.send('Hello CSS!!!');
});
app.get('/bad',(request,response)=>{
response.send({error: 'Bad Request'});
});
app.listen(port, ()=> {
console.log(`Server is running on Port ${port}` );
console.log(__dirname);
});
// folder structure
/cheatsheet/index.html
/stylesheet/style.css