使用node.js提供静态文件但不适用于链接的images / css / js

时间:2012-10-24 16:41:32

标签: node.js http webserver

我刚开始使用node.js并且我正在尝试提供一个静态index.html文件,当然它会加载CSS,JS和图像。我试过通过使用fs.readFile和node-static的serveFile读取index.html文件。

两者都提供文件,但是它找不到包含的CSS,JS和图像。也许这是我错误的路径,但这是我的目录结构。

Workspace structure

我使用了index.html文件中这些引用文件的相对路径。所以简单地说就是css / main.css。另外,如果他们需要相对于server.js文件,我做了../css/main.css。最后,如果路径必须是绝对的,并且index.html目录是root,那么/css/main.css。什么都没有加载。

我做错了什么?

var http = require('http'),
    fs = require('fs');


fs.readFile('../index.html', function (err, html) {
    if (err) {
        throw err; 
    }       
    http.createServer(function(request, response) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).listen(8080);
});

这可以很好地提供文件。

正如我所说,我还在学习。

node-static'API'不是很彻底,所以我恢复了上面的路线。

感谢。

4 个答案:

答案 0 :(得分:4)

使用您在上面创建的服务器,您将为每个请求发送HTML文件的内容 - 即使请求是针对图像或css文件的。您必须检查进入的请求对象以查看用户要求的内容,然后发送相应的文件并设置相应的内容类型。

或者,您可以让您的生活更轻松,并使用Express http://expressjs.com

Express会为您处理大部分内容,包括静态文件服务器。

答案 1 :(得分:3)

我的朋友,不要浪费你自己的时间重新发明轮子

使用Express框架,据我所知,它非常舒服,并且可以轻松处理这些事情。

答案 2 :(得分:0)

问题是您要返回的内容类型。请查看此示例以了解最常见的内容类型:

https://gist.github.com/2573391

答案 3 :(得分:0)

如果你必须自己做(而不是使用Express),你可以使用这个模块映射大多数MIME类型。