Итак, у меня есть простое клиентское приложение, взаимодействующее с приложением на стороне сервера в node.js. На стороне клиента у меня есть следующий код:
function send (name) {
http.request({
host: '127.0.0.1',
port: 3000,
url: '/',
method: 'POST'
}, function (response) {
response.setEncoding('utf8');
response.on('data', function (data) {
console.log('did get data: ' + data);
});
response.on('end', function () {
console.log('\n \033[90m request complete!\033[39m');
process.stdout.write('\n your name: ');
});
response.on('error', function (error) {
console.log('\n Error received: ' + error);
});
}).end(query.stringify({ name: name})); //This posts the data to the request
}
Нечетная часть, если я не включаю событие data, через:
response.on('data', function (data) {
console.log('did get data: ' + data);
});
Событие "конец" для ответа никогда не запускается.
Код сервера выглядит следующим образом:
var query = require('querystring');
require('http').createServer(function (request, response) {
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function () {
response.writeHead(200);
response.end('Done');
console.log('\n got name \033[90m' + query.parse(body).name + '\033[39m\n');
});
}).listen(3000);
Я хотел бы знать, почему это происходит, когда документация (насколько мне известно) не требует, чтобы вы прослушивали событие данных, чтобы закрыть сеанс ответа.