2015-05-31 3 views
0

Когда я сделать запрос HTTP, мне нужно сцепить ответ:Почему nodejs возвращает запрошенные данные?

request.on('response', function (response) { 
var body = ''; 
response.on('data', function (chunk) { 
    body += chunk; 
    }); 
... 

Почему, что реализованный таким образом? Почему бы не вывести весь результат?

+1

Что делать, если весь результат занимает больше памяти, чем у вас есть в вашей системе ? –

+0

Используйте express js он может быть более подходящим для вас: [express] (http://expressjs.com). Вам будет легче разрабатывать NodeJS (это на самом деле его цель). – MacKentoch

+0

Делая это, вы не объединяете ответ, но вы объединяете данные в ответе в виде буфера. – akshay

ответ

1

Узел использует только один процесс, нить. Это означает, что если вы много времени занимаетесь чем-то, вы не можете обрабатывать другие вещи, например, например, другие запросы клиентов ...

По этой причине, когда вы кодируете узел, вам нужно использовать код мышления асинхронным способом.

В этом случае запрос может быть медленным, и программа будет ждать, пока этот запрос ничего не сделает.

Я нашел это: Why is node.js asynchronous?

И это так интересно, как хорошо: http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop

1

Что вы получаете обратно поток, который является очень удобной конструкцией в Node.js. Необходимое чтение: https://github.com/substack/stream-handbook

Если вы хотите ждать, пока вы не получили полный ответ, вы можете сделать это очень легко:

var concat = require('concat-stream'); 

request.on('response', function(response) { 
    response.pipe(concat(function(body) { 
     console.log(body); 
    })); 
}); 
Смежные вопросы