C'est possible? Je voudrais configurer deux répertoires différents pour servir des fichiers statiques. Disons/public et/mnt
Vous pouvez également définir le chemin à partir duquel les fichiers statiques seront servis sur le Web en spécifiant un (premier) paramètre supplémentaire à use()
comme ceci:
app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));
De cette façon, vous obtenez deux répertoires différents sur le Web qui reflètent vos répertoires locaux, pas un chemin d'URL qui bascule entre deux répertoires locaux.
En d'autres termes, le modèle d'URL:
http://your.server.com/public/*
Sert les fichiers du répertoire local public
pendant:
http://your.server.com/public2/*
Sert les fichiers du répertoire local public2
.
BTW ceci est également utile si vous ne voulez pas que les fichiers statiques servent les fichiers depuis la racine de votre serveur mais plutôt depuis un chemin plus qualifié.
HTH
Vous pouvez également "fusionner" des répertoires en un seul répertoire visible
Structure du répertoire
/static
/alternate_static
Code
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
Les statiques et les alternatifs seront servis comme s'ils se trouvaient dans le même répertoire. Attention aux clobbers de nom de fichier, cependant.
Ce n'est pas possible par une seule injection de middleware, mais vous pouvez injecter static
middleware plusieurs fois:
app.configure('development', function(){
app.use(express.static(__dirname + '/public1'));
app.use(express.static(__dirname + '/public2'));
});
Explication
Regardez connect/lib/middleware/static.js # 14 :
path = normalize(join(root, path));
Il y a options.root
est une racine statique que vous définissez dans express.static
ou connect.static
appel et path
est le chemin de la demande.
Regardez plus 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);
Le chemin n'est vérifié qu'une seule fois et si le fichier est introuvable, la demande est transmise au middleware suivant.
Mise à jour pour Connect 2.x
Les liens vers le code sont inactifs pour Connect 2.x, mais l'utilisation de plusieurs middleware statiques est toujours possible comme auparavant.
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