2010-07-21 63 views
2

我試圖讓一個node.js服務器發送css文件。我在這裏修改該服務器:node.js發送css文件

http://github.com/LearnBoost/Socket.IO-node/blob/master/test/server.js

出了什麼問題我在做什麼:

server = http.createServer(function(req, res){ 
    // your normal server code 
    var path = url.parse(req.url).pathname; 
    switch (path){ 
     case '/': 
      res.writeHead(200, {'Content-Type': 'text/html'}); 
      res.write('<h1>Welcome. Try the <a href="/chat.html">chat</a> example.</h1>'); 
      res.end(); 
      break; 

     default: 
      if (/\.(js|html|swf)$/.test(path)){ 
       try { 
        var swf = path.substr(-4) === '.swf'; 
        res.writeHead(200, {'Content-Type': swf ? 'application/x-shockwave-flash' : ('text/' + (path.substr(-3) === '.js' ? 'javascript' : 'html'))}); 
        res.write(fs.readFileSync(__dirname + path, swf ? 'binary' : 'utf8'), swf ? 'binary' : 'utf8'); 
        res.end(); 
       } catch(e){ 
        send404(res); 
       }    
       break; 
      } 
      else if (/\.(css)$/.test(path)){ 
        res.writeHead(200, {'Content-Type': 'text/css'}); 
        res.end(); 
        break; 
      } 

      send404(res); 
      break; 
    } 
}); 

感謝。

回答

4

你只爲一個css請求寫一個響應頭。

如果你打電話curl -I http://your-server/some-file.css我想像,那你將獲得與0的內容長度200個狀態你可以只逃脫。

res.write(fs.readFileSync(__dirname + path, 'utf8')); 

但)不要重複自己,b。)這兩種方法中的「同步」意味着同步。它可能不適用於此版本,但在Node中,您應該只需撥打readFile並傳遞迴調以稍後完成請求。 API對於直接鏈接來說並不好,但File System部分應該有所幫助,請查找'fs.readFile'。

+0

我還需要做什麼? – jsnoob 2010-07-21 22:56:23

+0

當然你需要添加內容。 – 2010-07-21 23:01:02

+0

非常感謝。我不明白如何使用readFile。我明白如何使用回調,但我不明白你的意思完成請求。 – jsnoob 2010-07-21 23:10:07

2

你忘了發送文件。

... 
else if (/\.(css)$/.test(path)){ 
    res.writeHead(200, {'Content-Type': 'text/css'}); 
    res.write(fs.readFileSync(__dirname + path, 'utf8')); // <--- add this line 
    res.end(); 
    break; 
}