Tengo este codigo:
res.sendfile( '../../temp/index.html' )
Sin embargo, arroja este error:
Error: Forbidden
at SendStream.error (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/send/lib/send.js:145:16)
at SendStream.pipe (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/send/lib/send.js:307:39)
at ServerResponse.res.sendfile (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/response.js:339:8)
at exports.boot (/Users/Oliver/Development/Personal/Reader/server/config/routes.js:18:9)
at callbacks (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:161:37)
at param (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:135:11)
at pass (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:142:5)
at Router._dispatch (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:170:5)
at Object.router (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:33:10)
at next (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/connect/lib/proto.js:199:15)
¿Alguien puede decirme por qué podría ser esto?

res.sendfilepath.resolveDebe hacer lo que necesita.Respuestas:
Creo que es por el camino relativo; el "../" se considera malicioso. Primero resuelva la ruta local, luego llame
res.sendfile. Puede resolver el camino depath.resolveantemano.fuente
sendfilecomo malas. A menos que especifique elrootparámetro de directorio, como se ve aquí: github.com/visionmedia/express/issues/1465constse prefiere sobrevarEsta respuesta reúne la información de las otras respuestas / comentarios.
Depende de si desea incluir algo relativo al directorio de trabajo del proceso (cwd) o al directorio del archivo. Ambos usan la
path.resolvefunción (ponervar path = require('path')en la parte superior del archivo.path.resolve('../../some/path/to/file.txt');path.resolve(__dirname+'../../some/path/to/file.txt');Al leer el enlace del comentario de @ Joe, parece que las rutas relativas son un riesgo de seguridad si acepta la entrada del usuario para la ruta (por ejemplo,
sendfile('../.ssh/id_rsa')podría ser el primer intento de un pirata informático).fuente
La documentación de Express sugiere hacerlo de una manera diferente, y en mi opinión tiene más sentido que la solución actual.
res.sendFile('index.html', {root: './temp'});La opción raíz parece configurarse
./como el directorio raíz de su proyecto. Por lo tanto, no puedo decir completamente dónde está su archivo en relación con la raíz del proyecto, pero si su carpeta temporal está allí, puede establecerla./tempcomo la raíz del archivo que está enviando.fuente
.sendfilesino porque se basa completamente en otra cosa (ruta). Gracias por señalar esto.