我最近在用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页面加载前后放了一些调试语句:"正在加载索引"和";加载完成"。
现在,我已经和我的Facebook朋友分享了我的服务器链接,这样他们就可以看到我的应用程序了。大多数时候,一切都正常工作,但偶尔我会遇到这样的错误:
正在加载索引。。。
这种类型的响应不能有正文。忽略传递到end()的数据。
刚才我还得到了:
正在加载索引。。。
这种类型的响应不能有正文。正在忽略write()调用。
这个过程从来不会让"加载完成"语句
我已经尝试过无数次(在不同的机器、浏览器、设备、操作系统版本上访问我的应用程序),但每次都能正常工作。我四处寻找其他有这个问题的人,似乎不知何故,一个身体正在做出GET反应?我不完全确定这意味着什么,也不完全确定如何修复我的代码以防止这种情况发生。此外,我不确定产生此错误的客户端看到了什么?他们能看到我的应用程序吗?(即,这些只是警告吗?就他们而言,一切都很好?)
如有任何帮助,我们将不胜感激。
Xaan
如果您只是使用静态index.html
,为什么不使用express.static
自动为其提供服务?
app.use("/index.html", express.static(__dirname + '/index.html'));
这将导致expressjs自动处理HEAD
请求,这将解决您的问题。