2012-12-30 34 views
1

我使用node.js和express來將靜態JavaScript文件提供給單個頁面應用程序。 在我使用express.static允許公衆訪問的文件夾Node.js公共靜態文件夾以UTF-8字符集服務js

app.use(express.static(__dirname + '/public/')); 

在客戶端Node.js的服務器代碼,我用$.getScript來獲取存儲在公用文件夾中的JavaScript文件,例如:

$.getScript("js/init.js"); 

當我試圖獲得一些帶有重音符號或某些UTF-8特殊字符的JavaScript文件時,我會得到奇怪的字符而不是我想要的。

當我定義公用文件夾時,有什麼方法可以設置字符集嗎?

+0

你確定你的init.js文件保存在utf8中嗎? – asgoth

+0

或者只是沒有這些字符? :) –

回答

0

在HTML頁面中必須有同樣的編碼作爲你的資源文件的編碼(或者反過來)

確保您在頭段設置meta標籤:

<meta charset='utf-8'></meta> 
3

來自What's the simplest way to serve static files using node.js?的回答給了我一個在靜態之前插入自己的中間件的提示。

下面的代碼找到*.js文件並將字符集設置爲utf-8。

app.use(function(req, res, next) { 
    if (/.*\.js/.test(req.path)) { 
    res.charset = "utf-8"; 
    } 
    next(); 
}); 
app.use(express.static(__dirname + '/public/')); 

這樣做後,查找以下響應標題。

Content-Type: application/javascript; charset=utf-8 
+0

這是一個很好的答案;當使用'superagent'來測試從Express靜態服務器檢索到的.JS文件的文本時,這實際上保存了我,因爲'superagent'沒有返回文件的文本,除非它具有UTF-8編碼。 – joshuarh

+1

您還可以使用Node.js路徑庫獲得稍微更具表現力的條件。 'var path = require('path'); if(path.extname(req.path)==='.js'){ //它是JS } – joshuarh