2017-02-24 55 views
1

這裏是我的文件夾結構:如何指定節點服務器爲索引文件提供1個路徑?

我擁有src文件夾中的所有內容,src/index.html也是我想要指出的。而我的節點服務器上的文件是在src/server/server.js

enter image description here

當我運行正確node src/server/server命令我碰到下面的錯誤:

const express = require('express'); 

const app = express(); 

app.get('/', (req, res) => { 
    res.sendFile('index.html', { root: __dirname }); 
}); 

app.get('/category', (req, res) => { 
    res.end('Categories'); 
}); 

app.listen(8999, (res) => { 
    console.log(res); 
}); 

Error: ENOENT: no such file or directory, stat '/Users/leongaban/Projects/CompanyName/appName/src/server/index.html'

所以該錯誤信息,告訴我,我需要去多出1個文件夾,所以計算如下:

app.get('/', (req, res) => { 
    res.sendFile('../index.html', { root: __dirname }); 
}); 

不過現在我得到一個Forbidden錯誤:

ForbiddenError: Forbidden

回答

4

你會得到一個錯誤Forbidden的原因是因爲Node.js的認定相對路徑../惡意(例如,如果你根據用戶輸入一個文件,他可能會嘗試以訪問您不希望他訪問的文件系統上的文件)。

所以不是你應該使用path模塊就像指向this問題

代碼應該使用的路徑,像這樣:

var path = require('path'); 
res.sendFile(path.resolve(__dirname + '../index.html')); 
+0

謝謝! :D我不得不略微調整我的路徑''/../ index.html',但它現在起作用了!呵呵它爲我的索引文件提供服務,但沒有運行Angular應用程序。所以下一步就是搞清楚... –

+0

很高興你正在取得進展,一定要標記其中一個答案,以便用戶可以在未來輕鬆使用你的問題:) –

2

我早些時候曾與平均棧的問題類似的問題。

Mor Paz上面的答案應該可以工作。 :)

只是爲了貢獻,我做了以下。

var path   = require('path'); 

app.use(express.static(path.join(__dirname, 'public'))); 

app.get('/', function(req, res){ 
res.sendFile('../index.html'); 
}); 
相關問題