1

我刚开始使用 node js,我已经在上面移动了我的一个网站:

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

var app = http.createServer(function (req, res) {

    fs.readFile('./index.html', 'utf-8', function(error, content) {
        res.writeHead(200, {'Content-Type' : 'text/html'});
        res.end(content);
    });
});
app.listen(8080);

index.html 是我的网站主页。只有 html 它可以工作,但如果我在其中添加标签(例如包括 jquery),它会在 firebug 中给出 JS 错误:未捕获的语法错误:jquery.js 中的意外令牌 <,然后当然是“$ 未定义”。它也不加载图像。

我真的不需要做一些路由或使用 Express 框架或任何东西,它只是一个简单的单页网站。我究竟做错了什么 ?

4

1 回答 1

2

您的服务器未处理对图像或其他资源的请求。所有请求都被给予相同的./index.html页面响应。

这意味着如果页面中包含外部脚本或图像,则当浏览器对这些资源发出请求时,index.html将改为传递原始页面。

NodeJS 是相当低级的。您需要将服务器设置为根据每个请求的 URL 手动处理对不同类型资源的请求。

最好的办法是通读一些 NodeJS 教程。它们应该涵盖提供内容的基础知识,尽管其中许多不会处理较低级别的细节,并且会建议像 Connect 或 Express 这样的包。

将您的代码更改为此,您将看到正在请求的所有资源。

var http    =   require('http');
var fs      =   require('fs');
var url     =   require('url');
var path    =   require('path');

var app = http.createServer(function (req, res) {

    var pathname = url.parse(req.url).pathname;
    var ext      = path.extname(pathname).toLowerCase();

    console.log(pathname);

    if (ext === ".html") {
        fs.readFile('./index.html', 'utf-8', function(error, content) {
            res.writeHead(200, {'Content-Type' : 'text/html'});
            res.end(content);
        });
    }
});
app.listen(8080);
于 2012-09-22T18:02:41.157 回答