今天碰到一个奇怪的错误.
events.js:72 throw er; // Unhandled ‘error‘ event ^ Error: Parse Error at Socket.socketOnData (http.js:1583:20) at TCP.onread (net.js:527:27)
代码如下:
一个简单的http服务器
var http = require(‘http‘); var server = http.createServer(); server.listen(3000); server.on(‘request‘, function(req, res){ res.writeHead(‘Content-Type‘, ‘text/html‘); res.end(‘hello world‘); });
一段请求服务器的代码
var http = require(‘http‘); var req = http.request(‘http://localhost:3000‘); req.on(‘response‘, function(res){ res.setEncoding(‘utf8‘) res.on(‘data‘, function(data){ console.log(data); }) }) req.end();
问题出在这一行代码
res.writeHead(‘Content-Type‘, ‘text/html‘);
正确的写法是
res.writeHead(200, {‘Content-Type‘: ‘text/html‘});
如果服务器端写入了错误的header, 客户端就不能正确解析, 报的错误就是"Parse Error".
Node.js文档是这么解释req对象的error事件的
If any error is encountered during the request (be that with DNS resolution, TCP level errors, or actual HTTP parse errors) an ‘error‘ event is emitted on the returned request object.
如果Node.js的http module不能解析HTTP response, 一个error事件会被触发, 这就是为什么错误信息中有"Unhandled ‘error‘ event".
在查这个bug过程中, 一个困惑我的地方是, 我写的http请求代码会出错, 但是用浏览器打开http://localhost:3000却没问题. 当你写错了代码, 程序却正常运行了, 这样的bug最坑了.
时间: 2024-10-14 21:00:33