NodeJS - “这种类型的响应绝不能有身体...”

时间:2012-07-13 13:53:26

标签: javascript http node.js

我在使用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()调用。

该过程永远不会破坏“LOADING COMPLETE”语句。

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

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

Xaan

1 个答案:

答案 0 :(得分:0)

如果您只是使用静态index.html,为什么不使用express.static自动投放呢?

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

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