【问题标题】:node.js sending css filesnode.js 发送 css 文件
【发布时间】:2010-07-22 07:01:24
【问题描述】:

我正在尝试让 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;
    }
});

谢谢。

【问题讨论】:

    标签: css node.js


    【解决方案1】:

    你只是为一个 css 请求编写响应头。

    我想如果你打电话给curl -I http://your-server/some-file.css,你会得到一个内容长度为 0 的 200 状态。你可以侥幸逃脱:

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

    但是 a.) 不要重复自己,b.) 这两种方法中的“同步”意味着同步。它可能不适用于这个版本,但在一般情况下,在 Node 中,您应该只调用readFile 并传递回调以稍后完成请求。 API 不适合直接链接,但 File System 部分应该会有所帮助,请查找“fs.readFile”。

    【讨论】:

    • 非常感谢。我不明白如何使用 readFile。我了解如何使用回调,但我不明白您所说的完成请求是什么意思。
    • 因此,Node 的部分想法是,当您想要做一些缓慢的事情(例如访问文件系统)时,您只需向它提供一个您想要在完成后触发的回调并继续移动。它可能需要一些时间来适应,通常用于开发/测试/等。使用等待磁盘的同步方法完全没问题,但您最终希望转换到事件模型。见:techno-weenie.net/2010/1/15/node-js-for-my-tiny-ruby-brain
    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 2021-03-24
      • 2014-03-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      相关资源
      最近更新 更多