2012-11-12 83 views
7

我想使用expressjs的sendfile從腳本文件的父目錄發送文件。我試圖做的是這樣的:expressjs:從父目錄發送文件

​​

我得到一個禁止的錯誤,因爲顯然,sendfile不信任路徑遍歷。到目前爲止,我一直無法弄清楚如何更改通過sendfile發送的文件的目錄。任何提示?

編輯:發佈這個時我有點累,其實這很容易。我會把它留在這裏,以防其他人絆倒在這裏。有對sendfile的一個選項參數,可以讓你做到這一點,就像這樣:

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

對於服務器上的靜態資源,還可以使用'express.static'。理想情況下,sendFile函數用於提供文件(客戶端下載文件)而不用於靜態內容。 – smitrp

回答

5

您必須提及root作爲sendfile()的第二個參數。

例如:

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

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

你可以找到更多的細節在這裏: https://github.com/visionmedia/express/issues/1465

2

您需要使用express.static

說,你有以下目錄設置:

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

那麼你應該有以下Express配置:

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

res.sendfile是爲「更加細緻的」文件傳送到客戶。 See API docs for example

+0

'configure'方法在Express 3中似乎不存在 –

1

父文件夾: -app -routes.js -index.html 在上述情況下,添加以下代碼以routes.js從父目錄發送文件。

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

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