Quiero servir index.html
y /media
subdirectorio como archivos estáticos. El archivo de índice se debe servir tanto a /index.html
y/
direcciones URL.
yo tengo
web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));
pero la segunda línea aparentemente sirve la totalidad __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 acceder a la URL base /
lleva a una solicitud de web_server/index.html/index.html
(dobleindex.html
componente), que por supuesto falla.
¿Algunas ideas?
Por cierto, no pude encontrar absolutamente ninguna documentación en Express sobre este tema ( static()
+ sus parámetros) ... frustrante. Un enlace de documento también es bienvenido.
express.static()
se maneja mediante elserve-static
paquete de middleware. puede encontrar sus documentos en npmjs.com/package/serve-static o github.com/expressjs/serve-static .Respuestas:
express.static()
espera que el primer parámetro sea una ruta de un directorio, no un nombre de archivo. Sugeriría crear otro subdirectorio para contener suindex.html
y usar eso.Sirviendo archivos estáticos in exprés documentación , o más detallada
serve-static
documentación , incluyendo el comportamiento predeterminado de servirindex.html
:fuente
express.static
espera que ese parámetro sea la ruta ...Si tienes esta configuración
Entonces esto debería obtener lo que querías
El truco es dejar esta línea como último recurso
En cuanto a la documentación, dado que Express usa el middleware de conexión, me resultó más fácil mirar directamente el código fuente de conexión.
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
fuente
Application.configure()
fue documentado como legado en 3.xy eliminado en 4.x. Vea la respuesta de ChrisCantrell para un ejemplo actualizado.__dirname
? ¿Cuál es su valor?En la versión más nueva de express, el "createServer" está en desuso. Este ejemplo me funciona:
fuente
__file__
que se usaos.path.dirname(os.path.realpath(__file__))
public/teams/logo.png
?res.sendFile
yexpress.static
ambos trabajarán para esto¿Dónde
public
está la carpeta en la que está el código del lado del cliente?Según lo sugerido por @ATOzTOA y aclarado por @Vozzie ,
path.join
toma los caminos para unirse como argumentos,+
pasa un solo argumento al camino.fuente
path.join
toma las rutas para unirse como argumentos,+
pasa un solo argumento a la ruta.path.join(public + 'index.html')
apath.join(public, 'index.html')
Y mientras lo__dirname + "/public/"
path.join(__dirname, 'public')
fuente
fuente
use a continuación dentro de su app.js
(folderName es la carpeta que tiene archivos): recuerde que se accede a estos activos directamente a través de la ruta del servidor (es decir, http: // localhost: 3000 / abc.png (donde abc.png está dentro de la carpeta folderName)
fuente