2012-11-12 11 views
7

Vorrei utilizzare il file send di expressjs per inviare un file da una directory padre del file di script. Quello che ho cercato di fare è questo:expressjs: invio di un file dalla directory principale

app.get('/', function(req, res){ 
    res.sendfile('../../index.html'); 
}); 

ottengo un errore di proibito perché a quanto pare, non si fida sendfile percorso di attraversamento. Finora non sono stato in grado di capire come modificare la directory per i file inviati tramite sendfile. Qualche suggerimento?

Modifica: Ero un po 'stanco quando postare questo, in effetti è abbastanza facile. Lo lascerò qui nel caso in cui qualcun altro si imbatta in questo. C'è un parametro di un'opzione per sendfile che ti permette di fare proprio questo, in questo modo:

app.get('/', function(req, res){ 
    res.sendfile('index.html', { root: "../../"}); 
}); 
+1

Per le risorse statiche sul server, è anche possibile utilizzare 'express.static'. La funzione sendFile ideale è per servire file (file di download del client) non per contenuto statico. – smitrp

risposta

5

È necessario indicare root come secondo parametro di sendfile().

Ad esempio:

app.get('/:dir/:file', function(req, res) { 
    var dir = req.params.dir, 
     file = req.params.file; 

    res.sendfile(dir + '/' + file, {'root': '../'}); 
}); 

è possibile trovare maggiori dettagli qui: cartella https://github.com/visionmedia/express/issues/1465

2

È necessario utilizzare express.static.

Diciamo che avete il seguente directory configurare:

/app 
    /buried 
     /deep 
      server.js 
    /public 
     index.html 

allora si dovrebbe avere la seguente configurazione espresso:

var express = require('express'); 
var server = express.createServer(); 
server.configure(function(){ 
    server.use(express.static(__dirname + '../../public')); 
}); 
server.listen(3000); 

res.sendfile si intende per "più fine-grain" trasferimento di file al cliente. See API docs for example.

+0

il metodo 'configure' non sembra esistere in Express 3 –

1

genitore: -app -routes.js -index.html Nel caso di cui sopra, Aggiungi il seguente codice per routes.js per inviare un file dalla directory principale.

var path=require("path") //assuming express is installed 

app.get('/', function(req, res){ 
res.sendFile(path.join(__dirname + '/../index.html')); 
}); 
Problemi correlati