archivos estáticos con express.js

Quiero servir el subdirectorio index.html y /media como archivos estáticos. El archivo de índice debe /index.html en /index.html y / URLs.

yo tengo

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

pero la segunda línea aparentemente sirve para todo el __dirname , incluidos todos los archivos (no solo index.html y media ), que no quiero.

También intenté

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

pero el acceso a la URL base / luego conduce a una solicitud para web_server/index.html/index.html (componente double index.html ), que por supuesto falla.

¿Algunas ideas?


Por cierto, no pude encontrar absolutamente ninguna documentación en Express sobre este tema ( static() + its params) … frustrante. Un enlace de doc es bienvenido.

express.static() espera que el primer parámetro sea una ruta , no un nombre de archivo. Sugeriría crear otro subdirectorio para contener su index.html y usar eso.

Sirviendo archivos estáticos en la documentación Express.

Si tienes esta configuración

 /app /public/index.html /media 

Entonces esto debería obtener lo que querías

 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); 

El truco es dejar esta línea como último recurso

  server.use(express.static(__dirname + '/public')); 

En cuanto a la documentación, dado que Express usa middleware de conexión, me resultó más fácil simplemente mirar el código fuente de conexión directamente.

Por ejemplo, esta línea muestra que index.html es compatible https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140

En la versión más nueva de express, “createServer” está en desuso. Este ejemplo funciona para mí:

 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 ambos funcionarán para esto

 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); 

Donde public es la carpeta en la que se encuentra el código del lado del cliente

Según lo sugerido por @ATOzTOA y aclarado por @Vozzie , path.join toma las rutas para unirse como argumentos, el + pasa un único argumento a la ruta.

npm instalar servir-índice

 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 ); })