0

我最近在使用 node.js 编写 Web 应用程序时遇到了一个非常有趣的问题。本质上,我所做的只是将index.html页面提供给客户端。

这是代码:

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

var server = http.createServer(function(req, res){
        var path = url.parse(req.url).pathname;
        if(path == '/'){
            console.log("LOADING INDEX...");
            openIndex(req, res);
            console.log("LOADING COMPLETE.")
        } else {
            res.write("Something went wrong...");
            res.end();
        }
    }
);

var openIndex = function(req, res){
    fs.readFile('./index.html', function(error, content){
        if(error){
            res.writeHead(500);
            res.end();
        }
        else{
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(content, 'utf-8');
        }
    });
}

我在index.html页面加载前后添加了一些调试语句:"LOADING INDEX...""LOADING COMPLETE"

现在,我已经与我的 Facebook 朋友分享了我的服务器的链接,这样他们就可以看到我的应用程序。大多数时候,一切正常,但偶尔我会收到此错误:

加载索引...

这种类型的响应不能有正文。忽略传递给 end() 的数据。

刚才我还得到了:

加载索引...

这种类型的响应不能有正文。忽略 write() 调用。

该过程永远不会到达“加载完成”语句。

我试图无数次地重现这一点(在不同的机器、浏览器、设备、操作系统版本上访问我的应用程序),但每次它都能正常工作。我四处寻找有这个问题的其他人,似乎不知何故,身体正在进入 GET 响应?我不完全确定这意味着什么或如何修复我的代码以防止这种情况发生。另外,我不确定产生此错误的客户看到了什么?他们能看到我的应用吗?(即这些只是警告,就他们而言一切都很好?)

对此的任何帮助将不胜感激。

夏安

4

1 回答 1

0

如果你只是使用一个 static index.html,为什么不使用express.static它来自动服务呢?

app.use("/index.html", express.static(__dirname + '/index.html'));

这将导致 expressjs 自动处理HEAD请求,这应该可以解决您的问题。

于 2012-07-13T14:00:31.370 回答