Si hago un
res.sendfile('public/index1.html');
entonces recibo una advertencia de consola del servidor
Expresar en desuso
res.sendfile: utilizar en sures.sendFilelugar
pero funciona bien en el lado del cliente.
Pero cuando lo cambio a
res.sendFile('public/index1.html');
Me sale un error
TypeError: la ruta debe ser absoluta o especificar raíz para
res.sendFile
y index1.html no se presta
No puedo entender cuál es el camino absoluto. Tengo un publicdirectorio al mismo nivel que server.js. Estoy haciendo el res.sendFilede con server.js. También he declaradoapp.use(express.static(path.join(__dirname, 'public')));
Agregar mi estructura de directorio:
/Users/sj/test/
....app/
........models/
....public/
........index1.html
¿Cuál es la ruta absoluta que se especificará aquí?
Estoy usando Express 4.x.

express.staticmiddleware para servir su directorio público, ¿por qué necesitares.sendFileenviarlopublic/index1.html?res.sendFiledesde dentroapp.get('/', function(req, res){res.sendFile("...")})para enviarlo a pedido.Respuestas:
El
express.staticmiddleware está separado deres.sendFile, por lo que inicializarlo con una ruta absoluta a supublicdirectorio no hará nadares.sendFile. Necesita utilizar una ruta absoluta directamente conres.sendFile. Hay dos formas simples de hacerlo:res.sendFile(path.join(__dirname, '../public', 'index1.html'));res.sendFile('index1.html', { root: path.join(__dirname, '../public') });Nota:
__dirnamedevuelve el directorio en el que se encuentra el script que se está ejecutando actualmente. En su caso, parece queserver.jsestá enapp/. Por lo tanto, llegar apublic, tendrá que volver a cabo de una sola planta primera:../public/index1.html.Nota:
pathes un módulo incorporado que necesita serrequired para que el código anterior funcione:var path = require('path');fuente
res.sendFile('../public/index.html', {root: __dirname});también funciona y es más cortoconsole.log(path.join(__dirname, '../public', 'index.html'));perores.sendFile(path.join(__dirname, '../public', 'index.html'));solo trabajo convar path = require('path');res.sendFile('../public/index.html', {root: __dirname});ya no funciona, ya que devuelve 403 Prohibido por ir por encima de la raíz. Hazlo en sures.sendFile('public/index.html', {root: path.dirname(__dirname)});lugar.Solo intenta esto en su lugar:
Esto funcionó para mí. la raíz: __ dirname tomará la dirección donde se encuentra server.js en el ejemplo anterior y luego para llegar al index1.html (en este caso) la ruta devuelta es llegar al directorio donde está la carpeta pública.
fuente
donde
__dirnameadministrará el nombre del directorio en el queserver.jsreside el script que se está ejecutando actualmente ( ).fuente
pathhace independiente del sistema operativo .Una alternativa que aún no se ha enumerado y que funcionó para mí es simplemente usar
path.resolvecon cadenas separadas o solo una con toda la ruta:O
(Nodo v6.10.0)
Idea obtenida de https://stackoverflow.com/a/14594282/6189078
fuente
Basado en las otras respuestas, este es un ejemplo simple de cómo cumplir con el requisito más común:
Esto también funciona como una forma simple de responder con index.html en cada solicitud , porque estoy usando una estrella
*para capturar todos los archivos que no se encontraron en su directorio estático (público); que es el caso de uso más común para aplicaciones web. Cambie a/para devolver el índice solo en la ruta raíz.fuente
Intenté esto y funcionó.
fuente
process.cwd()Devuelve la ruta absoluta de su proyecto.Luego :
fuente
Otra forma de hacerlo escribiendo menos código.
fuente
¡puedes usar send en lugar de sendFile para que no te enfrentes con error! ¡Esto funciona te ayudará!
para decirle al navegador que su respuesta es un tipo de PDF
si desea que el archivo se abra inmediatamente en la misma página después de que el usuario lo descargue, escriba 'en línea' en lugar del archivo adjunto en el código anterior.
fuente
Si desea configurar esto una vez y usarlo en todas partes, simplemente configure su propio middleware. Cuando configure su aplicación, utilice lo siguiente para definir una nueva función en el objeto de respuesta:
Luego úsalo de la siguiente manera:
fuente
Utilicé Node.Js y tuve el mismo problema ... resolví simplemente agregando un '/' al comienzo de cada script y enlace a un archivo estático css.
Antes de:
Después:
fuente