因此,我有一个简单的客户端应用程序与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 }
奇怪的是,如果我不通过以下方式包含“数据”事件:
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);
我想知道当文档(据我所知)不需要您监听数据事件以关闭响应会话时为什么会发生这种情况。
该'end'只调用时所有的数据被消耗,检查下面的参考:
'end'
事件:“结束” 当不再提供任何数据时将触发此事件。 请注意,除非完全消耗了数据,否则不会触发end事件。可以通过切换到流模式或重复调用read()直到结束来完成此操作。
事件:“结束”
当不再提供任何数据时将触发此事件。
请注意,除非完全消耗了数据,否则不会触发end事件。可以通过切换到流模式或重复调用read()直到结束来完成此操作。
但是,为什么需要致电.on('data',..)?答案是
.on('data',..)
如果您附加了数据事件侦听器,则它将把流切换到流模式,并且数据将在可用时立即传递给您的处理程序。
因此,基本上,通过添加data侦听器,它将流转换为流模式并开始使用数据。
data
请检查此链接以获取更多参考。