首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自http请求的Node.js响应未调用“end”事件,但不包括“data”事件

来自http请求的Node.js响应未调用“end”事件,但不包括“data”事件
EN

Stack Overflow用户
提问于 2014-05-23 05:13:51
回答 1查看 30.2K关注 0票数 27

因此,我有一个简单的客户端应用程序,它用node.js与服务器端应用程序通信。在客户端,我有以下代码:

代码语言:javascript
复制
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‘事件,通过:

代码语言:javascript
复制
    response.on('data', function (data) {
       console.log('did get data: ' + data);
    });

响应的'end‘事件永远不会被触发。

服务端代码如下:

代码语言:javascript
复制
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);

我想知道为什么文档(据我所知)不要求您为了关闭响应会话而监听数据事件,为什么会发生这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-23 05:37:26

仅当所有数据都被使用时才会调用'end',请检查下面的引用:

事件:'end‘

当不再提供任何数据时,将触发此事件。

请注意,除非完全使用数据,否则不会触发end事件。这可以通过切换到流动模式,或者重复调用read()直到结束。

但是为什么你需要调用.on('data',..)呢?答案是

如果您附加了一个数据事件侦听器,那么它会将流切换到流模式,并且一旦数据可用,就会将数据传递给您的处理程序。

因此,基本上通过添加data侦听器,它将流更改为流模式,并开始使用数据。

有关它的更多参考信息,请查看this link

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23817180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档