web-dev-qa-db-fra.com

Configuration de deux répertoires statiques différents dans le framework node.js Express

C'est possible? Je voudrais configurer deux répertoires différents pour servir des fichiers statiques. Disons/public et/mnt

90
sNiCKY

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

141
facetcounter

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.

50
Randolpho

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.

40
Phillip Kovalev
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
1
Ajay Ruhela