2013-05-14 4 views
1

я следующие функции в Node.js внутри http.request()кусок в node.js

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

я получаю это в консоли

<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 
...> 

Но когда я использую это:

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

я получаю правильный ответ XML, как это:

responose: .....xml responose..... 

Я не понимаю, почему мне нужно добавить строку для вывода правильного ответа. И что подразумевается под ответом, сгенерированным в первом коде?

+0

Я не совсем уверен (поэтому я отвечаю как комментарий), но я думаю, что, поскольку кусок представляет собой буфер, вам нужно вызвать '.toString()' на нем, чтобы получить читаемую строку. Это делается автоматически, когда вы добавляете к ней строку. Первый вывод выше представляет собой представление необработанных данных, хранящихся в буфере. Я был бы счастлив, если бы кто-то еще хотел подтвердить/оспаривать мою догадку. –

+0

Подробнее о буферах см. В [docs] (http://nodejs.org/api/buffer.html#buffer_buf_tostring_encoding_start_end). –

ответ

5

chunk является Buffer, который является способом Node для хранения двоичных данных.

Поскольку это двоичные данные, вам необходимо преобразовать их в строку, прежде чем вы сможете ее правильно показать (иначе console.log покажет свое представление объекта). Один из методов состоит в добавлении его в другой строке (ваш второй пример делает это), еще один способ заключается в вызове toString() на нем:

console.log(chunk.toString()); 

Однако, я думаю, что это имеет потенциал неудачу, когда chunk содержит неполные символы (Символ UTF-8 может состоять из нескольких байтов, но вы не получаете гарантии, что chunk не отрезается прямо в середине такой строки байтов).

Смежные вопросы