268 votes

fichiers statiques avec express.js

Je veux servir index.html y /media en tant que fichiers statiques. Le fichier d'index doit être servi à la fois à /index.html y / URLs.

J'ai

web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));

mais la deuxième ligne sert apparemment à l'ensemble __dirname y compris tous les fichiers qu'il contient (pas seulement index.html y media ), ce que je ne veux pas.

J'ai aussi essayé

web_server.use("/", express.static(__dirname + '/index.html'));

mais en accédant à l'URL de base / conduit ensuite à une demande de web_server/index.html/index.html (double index.html ), qui échoue bien sûr.

Des idées ?


D'ailleurs, je n'ai trouvé absolument aucune documentation dans Express sur ce sujet ( static() + ses paramètres)... frustrant. Un lien vers la doc est également le bienvenu.

6 votes

A partir d'express 4.x, express.static() est traité par serve-static Vous pouvez trouver sa documentation à l'adresse suivante npmjs.com/package/serve-static o github.com/expressjs/serve-static .

0 votes

Quelqu'un peut-il expliquer ce que signifie "serveur en tant que fichiers statiques" ?

0 votes

@iLiveInAPineappleUnderTheSea Dans une application web dynamique, comme lorsqu'on utilise Express, le contenu de la page est créé - ou généré - par l'application. En revanche, les fichiers statiques sont servis (la plupart du temps) sans être modifiés à partir d'une hiérarchie de répertoires statiques. Par exemple, si les pages peuvent changer, les fichiers d'image, les fichiers CSS et les fichiers Javascript ne changent pas.

7voto

Si vous avez une structure de dossier compliquée, telle que

- Your application
     - assets
         - images
             - profile.jpg
     - web
     - server
        - index.js

Si vous voulez servir assets/images de index.js

app.use('/images', express.static(path.join(__dirname, '..', 'assets', 'images')))

Pour visualiser à partir de votre navigateur

http://localhost:4000/images/profile.jpg

Si vous avez besoin d'un commentaire plus précis, je vais élaborer.

0 votes

La meilleure réponse du lot !

5voto

Pravin Points 71

Utilisez le code ci-dessous dans votre app.js

app.use(express.static('folderName'));

(folderName est le dossier contenant les fichiers) - n'oubliez pas que l'accès à ces ressources se fait directement par le chemin d'accès au serveur (c'est-à-dire que les ressources sont accessibles par le chemin d'accès au serveur). http://localhost:3000/abc.png (alors que abc.png est dans le dossier folderName)

3voto

Rejayi CS Points 526

npm install serve-index

var express    = require('express')
var serveIndex = require('serve-index')
var path = require('path')
var serveStatic = require('serve-static')
var app = express()
var port = process.env.PORT || 3000;
/**for files */
app.use(serveStatic(path.join(__dirname, 'public')));
/**for directory */
app.use('/', express.static('public'), serveIndex('public', {'icons': true}))

// Listen
app.listen(port,  function () {
  console.log('listening on port:',+ port );
})

1voto

Minsky Points 1690

Je voudrais ajouter quelque chose qui est sur le documents express et il est parfois mal interprété dans les tutoriels ou autres.

app.use(mountpoint, middleware) 

point de montage est un chemin virtuel, il n'est pas dans le système de fichiers (même s'il existe réellement). Le point de montage pour l'intergiciel est le app.js dossier.

Maintenant

app.use('/static', express.static('public')`

enverra les fichiers avec le chemin /static/hell/meow/a.js a /public/hell/meow/a.js

0voto

malik attiq Points 1

C'est l'erreur dans mon cas lorsque je fournis des liens vers des fichiers HTML.

avant :

<link rel="stylesheet" href="http://stackoverflow.com/public/style.css">

Après :

<link rel="stylesheet" href="http://stackoverflow.com/style.css">

Je viens de supprimer le chemin du répertoire statique du lien et l'erreur a disparu. Cela résout mon erreur ; n'oubliez pas de mettre cette ligne à l'endroit où vous créez le serveur.

var path = require('path');
app.use(serveStatic(path.join(__dirname, 'public')));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X