Je veux servir le sous-répertoire index.html
et /media
sous forme de fichiers statiques. Le fichier d'index doit être servi aux URL /index.html
et /
.
J'ai
web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));
mais la deuxième ligne sert apparemment tout le __dirname
, y compris tous les fichiers qu'il 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 accéder à l'URL de base /
conduit alors à une demande à web_server/index.html/index.html
(composant double index.html
), qui échoue bien sûr.
Des idées?
À propos, je n'ai trouvé absolument aucune documentation dans Express sur ce sujet (static()
+ ses paramètres) ... frustrant. Un lien vers la documentation est également le bienvenu.
express.static()
s'attend à ce que le premier paramètre soit un chemin d'un répertoire, pas un nom de fichier. Je suggérerais de créer un autre sous-répertoire contenant votre index.html
et de l'utiliser.
Servir des fichiers statiques dans Express documentation , ou documentation plus détaillée de serve-static
, y compris comportement par défaut de la distribution de index.html
:
Par défaut, ce module enverra des fichiers "index.html" en réponse à une demande sur un répertoire. Pour désactiver cet ensemble, indiquez false ou pour fournir un nouvel index, transmettez une chaîne ou un tableau dans l'ordre de votre choix.
Si vous avez cette configuration
/app
/public/index.html
/media
Ensuite, cela devrait obtenir ce que vous vouliez
var express = require('express');
//var server = express.createServer();
// express.createServer() is deprecated.
var server = express(); // better instead
server.configure(function(){
server.use('/media', express.static(__dirname + '/media'));
server.use(express.static(__dirname + '/public'));
});
server.listen(3000);
L'astuce est de laisser cette ligne comme dernier repli
server.use(express.static(__dirname + '/public'));
Pour ce qui est de la documentation, comme Express utilise le middleware Connect, j’ai trouvé plus facile de regarder directement le code source de Connect.
Par exemple, cette ligne indique que index.html est pris en charge https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L14
Dans la version la plus récente d'Express, "createServer" est obsolète. Cet exemple fonctionne pour moi:
var express = require('express');
var app = express();
var path = require('path');
//app.use(express.static(__dirname)); // Current directory is root
app.use(express.static(path.join(__dirname, 'public'))); // "public" off of current is root
app.listen(80);
console.log('Listening on port 80');
res.sendFile
& express.static
les deux fonctionneront pour cela
var express = require('express');
var app = express();
var path = require('path');
var public = path.join(__dirname, 'public');
// viewed at http://localhost:8080
app.get('/', function(req, res) {
res.sendFile(path.join(public, 'index.html'));
});
app.use('/', express.static(public));
app.listen(8080);
Où public
est le dossier dans lequel le code côté client est
Comme suggéré par @ ATOzTOA et clarifié par@ Vozzie , path.join
prend les chemins à rejoindre en tant que arguments, le +
passe un seul argument à path.
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 );
})
utiliser ci-dessous dans votre app.js
app.use(express.static('folderName'));
(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)
const path = require('path');
const express = require('express');
const app = new express();
app.use(express.static('/media'));
app.get('/', (req, res) => {
res.sendFile(path.resolve(__dirname, 'media/page/', 'index.html'));
});
app.listen(4000, () => {
console.log('App listening on port 4000')
})