http.request を使用してクライアント リクエスト (ノード v0.6.18、v0.6.3) を作成するとエラーが発生しました。次のコードでエラーが発生し、いくつか質問があります。
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
ここに私の質問があります:
- res の「end」イベントが socket の「error」イベントよりも前に発生したのはなぜですか?
- 上記のコードのように、または他の状況で「ソケット.ondata での解析エラー」が発生したときにエラーをコールバックしたい場合は、上記の出力のように 2 回ではなく 1 回コールバックする方法 (IF res の「終了」イベントが実際に以前に発生した場合)ソケットの「エラー」イベント)?
あなたの助けが必要です!ありがとう。
===============================
同じコード出力が見つかりました:
res on end
result, err: null, data: �
ノード v0.6.6 および v0.6.11 で。なんで?