Je veux servir index.html
et /media
sous - répertoire en tant que fichiers statiques. Le fichier d'index doit être diffusé à la fois sur /index.html
et sur les /
URL.
j'ai
web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));
mais la deuxième ligne sert apparemment l'intégralité __dirname
, y compris tous les fichiers qu'elle contient (pas seulement index.html
et media
), ce que je ne veux pas.
J'ai aussi essayé
web_server.use("/", express.static(__dirname + '/index.html'));
mais l'accès à l'URL de base /
conduit alors à une demande à web_server/index.html/index.html
(double index.html
composant), qui bien sûr échoue.
Des idées?
Soit dit en passant, je n'ai pu trouver absolument aucune documentation dans Express sur ce sujet ( static()
+ ses paramètres) ... frustrant. Un lien doc est également le bienvenu.
express.static()
est géré par leserve-static
middleware du package. vous pouvez trouver ses documents sur npmjs.com/package/serve-static ou github.com/expressjs/serve-static .Réponses:
express.static()
s'attend à ce que le premier paramètre soit le chemin d'un répertoire, pas un nom de fichier. Je suggère de créer un autre sous-répertoire pour contenir votre fichierindex.html
et l'utiliser.Servir des fichiers statiques dans la documentation Express ou une
serve-static
documentation plus détaillée , y compris le comportement par défaut du serviceindex.html
:la source
express.static
s'attend à ce que ce paramètre soit le chemin ....Si vous avez cette configuration
Ensuite, cela devrait obtenir ce que vous vouliez
L'astuce est de laisser cette ligne comme dernier repli
En ce qui concerne la documentation, étant donné qu'Express utilise le middleware connect, j'ai trouvé plus facile de regarder directement le code source de connect.
Par exemple, cette ligne montre que index.html est pris en charge https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140
la source
Application.configure()
a été documenté comme hérité dans 3.x et supprimé dans 4.x. Voir la réponse de ChrisCantrell pour un exemple mis à jour.__dirname
? Quelle est sa valeur?Dans la dernière version d'express, le "createServer" est déconseillé. Cet exemple fonctionne pour moi:
la source
__file__
que vous utilisez avecos.path.dirname(os.path.realpath(__file__))
public/teams/logo.png
?res.sendFile
et lesexpress.static
deux fonctionneront pour celaOù se
public
trouve le dossier dans lequel se trouve le code côté clientComme suggéré par @ATOzTOA et clarifié par @Vozzie ,
path.join
prend les chemins à joindre comme arguments,+
passe un seul argument à path.la source
path.join
prend les chemins à joindre comme arguments,+
passe un seul argument à path.path.join(public + 'index.html')
enpath.join(public, 'index.html')
Et pendant que vous y êtes , changez__dirname + "/public/"
enpath.join(__dirname, 'public')
la source
la source
utiliser ci-dessous dans votre app.js
(folderName est un dossier contenant des fichiers) - rappelez-vous que ces ressources sont accessibles directement via le chemin du serveur (c'est-à-dire http: // localhost: 3000 / abc.png (où abc.png se trouve dans le dossier folderName)
la source