2017-09-16 55 views
0

我真的很陌生,我試圖瞭解發送靜態文件是如何工作的。我設法爲我的索引文件提供服務,但是我無法將其他文件作爲GET請求的響應。Node/Express根據請求發送靜態文件

app.use(express.static(path.join(__dirname, '/client/build'))) 

app.get('/', (req, res) => { 
    res.sendFile(path.resolve(__dirname, '.', 'client/build/', 'index.html')) 
    res.end() 
}) 

app.get('/portfolio', (req, res) => { 
    const person = req.query.name 
    var filePath = __dirname + '/client/build/' + person + '/' + 'index.html' 
    res.sendFile(filePath) 
    res.end() 
}) 

我發現了類似的問題,但似乎沒有任何工作。

我發送請求爲:

fetch(`portfolio?name=${who}`) 
+1

你發送給服務器的請求是什麼? – alexmac

+0

什麼是「人」,你發送給服務器的請求是什麼? @alexmac – turmuka

+0

我編輯的問題,請求 取('組合?name = $ {}誰') 其中「誰」是投資組合持有 – Braian

回答

0

有你的代碼的幾個問題。其中之一就是在文件發送完成之前結束請求,而另一個問題是您沒有正確使用方法res.sendFile

嘗試這樣的事:

app.get('/', (req, res) => { 
    const fileDirectory = path.resolve(__dirname, '.', 'client/build/'); 

    res.sendFile('index.html', {root: fileDirectory}, (err) => { 
    res.end(); 

    if (err) throw(err); 
    }); 
}) 

app.get('/portfolio', (req, res) => { 
    const person = req.query.name 
    const fileDirectory = __dirname + '/client/build/' + person + '/'; 

    res.sendFile('index.html', {root: fileDirectory}, (err) => { 
    res.end(); 

    if (err) throw(err); 
    }); 
}) 

我不建議每當你得到一個扔一個錯誤,但它至少應該給你一個想法,你如何能得到這個工作。

app.use(express.static(path.join(__dirname, 'client/build/person1'))) 
app.use(express.static(path.join(__dirname, 'client/build/person2'))) 

,把它像這樣的觀點:

+0

我試過的名稱(字符串),但它並沒有工作。正如有人指出的,第一個請求處理程序('/')不是必需的,因爲express.static會映射路由。但第二個仍然不起作用,如果我把一個console.log它記錄的東西,所以請求正在處理,但它不會做任何事情,它會拋出錯誤 – Braian

0

我終於通過使用此服務器上解決它

<a href='/person1'></a> 
<a href='/person2'></a> 

,因爲它似乎,express.static解決路徑上的其自己的,所以你不需要自己處理請求來提供靜態文件。

如果這不是一個好的解決方案,請注意