Estoy tratando de servir archivos estáticos de dos directorios usando express.
La razón por la que sirvo desde dos directorios se debe a las colisiones de nombres entre los archivos que se sirven en el directorio n.º 1 que tienen un nombre de directorio coincidente en el directorio n.º 2
En el directorio #1, contendrá solo archivos:
/path/to/dir1/foo (where 'foo' is a file)En el directorio #2, contendrá subdirectorios que contienen archivos:
/path/to/dir2/foo/bar (where 'foo' is a dir && 'bar' is a file)Mi objetivo es poder ejecutar los siguientes comandos:
wget "http://myserver:9006/foo" wget "http://myserver:9006/foo/bar"El siguiente fragmento de código logrará todo hasta el directorio n. ° 2 para mí:
"use strict"; const express = require('express'); const app = express(); app.use('/', express.static('/path/to/dir1/')) const server = app.listen(9006, () => { let host = server.address().address; let port = server.address().port; console.log(`Example app listening at http://${host}:${port}`); });Estoy tratando de agregar la segunda ruta estática con una expresión regular para ver si hay un '/' en la ruta para poder dirigirla al directorio #2. Estoy pensando algo en este sentido, pero no he tenido ningún éxito:
app.use('/[^/]*([/].*)?', express.static('/path/to/dir2/'));o
app.use('/.*/.*', express.static('/path/to/dir2/'));Apreciaría cualquier ayuda.
¡Gracias por adelantado!
De acuerdo con los documentos , puede llamar a express.static varias veces y buscará archivos en el orden en que especificó los directorios.
Estructura de carpetas:
/ static/ s1/ foo # Contents: s1/foo the file s2/ foo/ bar # Contents: s2/foo/bar the file.La aplicación es su código exacto excepto por las dos líneas estáticas:
const express = require('express') const app = express() app.use('/', express.static('static/s1')) app.use('/', express.static('static/s2')) const server = app.listen(9006, () => { let host = server.address().address let port = server.address().port console.log(`Example app listening at http://${host}:${port}`) })Y las páginas funcionan como se esperaba.
$ curl localhost:9006/foo s1/foo the file $ curl localhost:9006/foo/bar s2/foo/bar the file.