2015-09-12 59 views
2

我已經使用res.sendFile()成功實現了服務靜態文件,但是如果添加一些查詢字符串,它不起作用。使用查詢字符串快速查找res.sendFile()

E.g.下面的代碼工作得很好。

res.sendFile(path.join(__dirname, '../public', '/index.html')); 

但如果我這樣做,它失敗

res.sendFile(path.join(__dirname, '../public', '/index.html?id=' + req.params.id)); 

res.sendFile(path.join(__dirname, '../public', '/index.html?id=123')); 

然後我得到下面的錯誤

ENOENT, stat '/Users/krishnandu/Documents/Project/public/index.html?id=123' 

404 

Error: ENOENT, stat '/Users/krishnandu/Documents/Project/public/index.html?id=123' 
    at Error (native) 
+0

我認爲你應該使用'res.render'來代替並將參數傳遞給視圖模板 – CodeBeginner

+0

@CodeBeginner嗯,我正在渲染一個靜態的HTML文件,而不是基於jade/ejs的模板文件。 –

回答

3

你不可錯過的查詢字符串參數與res.sendFile()。您必須指定res.sendFile()

語法作爲第一個參數的文件路徑是:

res.sendFile(path [, options] [, fn]) 

所以你可以做的是,

  1. 使用查詢字符串的路線,說route1(參考下面的代碼)

  2. 的GET方法裏面ROUTE1,使用res.sendFile()

    app.get('/route1',function(req,res){ 
        res.sendFile(path.join(__dirname, '../public', '/index.html')); 
    }); 
    
    res.redirect('/route1?id=123'); 
    

參見的res.sendFileres.redirectExpress API documentation

+4

如何訪問'index.html'中的'id'? – Sky