node.js中的块数据记录

beN*_*erd 1 http node.js express

我在http.request()中的node.js中有以下函数

       res.on('data', function (chunk) {
    var sr="response: "+chunk;
    console.log(chunk);
    });
Run Code Online (Sandbox Code Playgroud)

我在控制台得到这个

<Buffer 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 63 6f
 64 69 6e 67 3d 22 75 74 66 2d 38 22 20 3f 3e 3c 72 65 73 75 6c 74 3e 3c 73 75 63
 ...>
Run Code Online (Sandbox Code Playgroud)

但是当我使用它时:

res.on('data', function (chunk) {
    var sr="response: "+chunk;
    console.log(sr);
    });
Run Code Online (Sandbox Code Playgroud)

我得到一个正确的xml响应,如下所示:

responose: .....xml responose.....
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我需要附加一个字符串来输出正确的响应.第一个代码中生成的响应是什么意思?

rob*_*lep 6

chunk是一个缓冲区,它是Node存储二进制数据的方式.

因为它是二进制数据,所以在正确显示之前需要将其转换为字符串(否则,console.log将显示其对象表示).一种方法是将它附加到另一个字符串(第二个示例就是这样),另一种方法是调用toString()它:

console.log(chunk.toString());
Run Code Online (Sandbox Code Playgroud)

但是,我认为当chunk包含不完整的字符时,它有可能失败(UTF-8字符可以由多个字节组成,但是你没有得到在chunk这样的字节字符串中间没有被切断的保证) .