我有一些错误,当使用http.request做客户端请求(节点v0.6.18,v0.6.3),下面的代码产生的错误,我有一些问题。nodejs错误:解析错误在Socket.ondata
var http = require('http');
var url = require('url');
http.createServer(function(req, res) {
var data = '多情自古空余恨';
res.writeHead(200, {
'Content-Type': 'text/plain',
'Content-Length': 1 //ERROR
});
res.end(data);
}).listen(3000);
function request(options, callback) {
var req = http.request(options, function(res) {
var data = '';
res.setEncoding = 'utf8';
res.on('data', function(chunk) {
data += chunk;
});
res.on('error', function(err) {
callback(new Error('res error: ' + err));
});
res.on('end', function() {
console.log('res on end');
callback(null, data);
});
});
req.on('socket', function(socket) {
socket.on('error', function(err) {
console.log('socket on error');
callback('socket error: ' + err);
req.abort();
});
});
req.end();
}
request({
host: 'localhost',
port: 3000,
method: 'GET'
}, function(err, data) {
console.log('result, err: ' + err + ', data: ' + data);
});
输出:
res on end
result, err: null, data: �
socket on error
result, err: socket error: Error: Parse Error, data: undefined
这里是我的问题:
- 为什么资源的 '结束' 事件早于插座的 '错误' 的事件发生?
- 如果我确实想回调一个错误,当“解析错误在Socket.ondata”发生像上面的代码或在任何其他情况下,如何回调一次,而不是上述输出的两倍(IF res的'结束'事件真的比套接字的'错误'事件早发生)?
我需要你的帮助!谢谢。
===============================
我发现相同的代码输出:
res on end
result, err: null, data: �
在节点v0.6.6和v0.6.11中。为什么?
心灵?我不记得在野外看到一个不正确的内容长度标题。 –
为什么不修复内容长度标题,然后尝试 – Esailija
@Nathan Friedly,Esailija,我不知道为什么错误“错误:解析错误 在Socket.ondata(http.js:1124:24)在TCP.onread(net.js:348:27)处出现“ ”实际上(当然我想知道这是怎么发生的,并且进程总是会突然停止,并且出现这个异常),我发现这是从google重现它的一种方式。 – Boris