2016-02-16 50 views
0

我有一個簡單的節點服務器,我有一個從我的服務器請求一個字體的CSS文件:如何使用http和fs庫在node.js中爲.ttf文件提供服務?

@font-face{ 
    font-family: 'NiagaraSolid-Reg'; 
    src: url('http://localhost:1111/NIAGSOL.TTF'); 
} 

這是我試圖這樣做。它通常以.html,工程的CSS和.js文件:

http.createServer(function(request,response){ 
    var arguments=request.url.slice(1).split("/"); 
    switch(arguments[0]){ 
     case "NIAGSOL.TTF": 
      response.end(fs.readFileSync("website/NIAGSOL.TTF").toString()); 
      break; 
     //etc 
}) 

但是當我這樣做,在Chrome中我得到的錯誤信息:Failed to decode downloaded font: http://localhost:1111/NIAGSOL.TTF

在尋找一個答案,一切我來了對我來說太複雜了,因爲它需要很多事情的先決知識。對於緩衝區和數據流以及二進制文件和編碼等,我完全不識字。對於如何服務.tff文件,我需要一個簡單的「解釋式 - 我 - 五」答案。

謝謝!

回答

0

How to serve an image using nodejs

此鏈接幫助我弄清楚該怎麼做。一時興起,我決定嘗試response.end(fs.readFileSync("website/NIAGSOL.TTF"),"binary");,它工作。不知道爲什麼,但嘿!

+1

原因是,使用toString你得到編碼和其他東西,所以它發送的二進制文件是不同於原來的。 – bolav

+0

謝謝。很高興知道! –

0

如果您在節點中編碼原始http服務器,則必須在響應中設置「Content-Type」標頭。所以如果你正在提供一個html文件,你可以將標題內容類型設置爲「text/html」。同樣,您必須通過在服務於ttf文件的響應中設置標頭來告訴節點爲.ttf文件提供服務。您可以通過將內容類型設置爲「application/x-font-ttf」來完成此操作。

http.createServer(function (req, res) { res.writeHead(400, { "Content-Type": "application/x-font-ttf" }); }); 你需要編寫自己的代碼來處理服務器可能服務的不同文件類型。只要記住,如果它的.ttf,設置標題如上。

相關問題