【问题标题】:Does node.js `response.end` event ever send the optional `data` and `encoding` parameters?node.js `response.end` 事件是否曾经发送可选的 `data` 和 `encoding` 参数?
【发布时间】:2016-04-16 16:42:24
【问题描述】:

文档定义了response.end([data][, encoding][, callback]),并声明:

如果指定了data,则相当于调用response.write(data, encoding) 后跟 response.end(callback)。

我是否正确地使用了end 事件,还是极不可能有人将数据传递给end 事件?

var http = require('http');

http.get(
    process.argv[2],
    function (response) {
        response.setEncoding('utf8');
        response.on('error', console.error);
        response.on('data', console.log);

        // Check for data and exit on 'end' event
        response.on(
            'end',
            function (data, encoding) {
                if ( null != data ) {
                    console.log(data.toString(encoding));
                }
                return;
            }
        );
    }
);

【问题讨论】:

  • 你能看到最后的数据吗?
  • 在我的具体例子中,它是undefined,如果它没有通过的话。我预料到这是因为它是可选的。

标签: javascript node.js event-handling


【解决方案1】:

response.on('end'...) 表示响应中没有更多数据。

data 如文档中所述以块的形式发送。它是一个可读流,on('end') 允许您传入自己的数据,您可以在其中包含简单的文本,这就是这样写的:

文档基本上解释了您可以执行此操作的两种方法。

例子:

response.write('Hello World\n');
response.end();

OR
response.end('Hello World\n');

一般来说,这对于少量数据来说很好,但数据的分块在response.on('data'...); 中处理,您可以在其中将数据放入一个数组中,然后将该数组传递给response.on('end'...)这就是我建议对更大的分块数据执行此操作的方式。一个很好的练习可能是在回调中记录数据以查看它是否通过。

编辑:

关于您在 cmets 中的问题:

你的代码是正确的,并且是可选的,这样想,你向那个函数发送一些东西,一个请求,它做一个响应,如果它的大块被分成块,你可以在@987654327 中获取这些块@,你可以在最后用on(end)发回来,就这么简单

希望对您有所帮助。

【讨论】:

  • 感谢您这么快的回复,但我仍然很困惑我上面显示的代码是否正确甚至必要?
  • 它是正确的,可选的,这样想,你向那个函数发送一些东西,一个请求,它做一个响应,如果它的大块被分成块,你可以得到那些在 on(data) 中的块,你可以在最后使用 on(end) 将它发送回来,就这么简单
  • 我会检查你是否会在更详细的回复之前将其移至你的答案。
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 2015-11-12
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
相关资源
最近更新 更多