2010-07-21 103 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; 
}