Я следующий Node.js код (перехватывающей прокси):Node.js - response.write (...) не работает
var http = require('http');
var eamorr=require('./Eamorr_addon/out/Release/Eamorr_addon');
http.createServer(function(request,response){
var proxy=http.createClient(80,request.headers['host'])
var proxy_request=proxy.request(request.method,request.url,request.headers);
proxy_request.addListener('response',function(proxy_response){
proxy_response.addListener('data',function(chunk){
var arr=eamorr.analyse(chunk);
for(var i=0;i<arr.length;i++){
//console.log(arr[i]+"\n\n");
response.write(arr[i]);
}
response.write("2"); //this doesn't get written!
});
proxy_response.addListener('end',function(){
response.end();
});
response.writeHead(proxy_response.statusCode,proxy_response.headers);
});
request.addListener('data',function(chunk){
proxy_request.write(chunk,'binary');
});
request.addListener('end',function(){
proxy_request.end();
});
}).listen(10002);
Как вы можете видеть, у меня есть обычай Node.js addon с функцией analyse()
, которая возвращает массив строк. Затем я перебираю этот массив и записываю результат.
Проблема, которую я испытываю, заключается в том, что «2» не написано!
Я действительно застрял здесь и задавался вопросом, может ли кто-нибудь помочь?
Теперь я знаю, что (в соответствии с документами Node.js), что «в первый раз вызывается response.write(), он отправляет клиенту информацию о буферизованном заголовке и первое тело. Второй ответ времени. write(), Node предполагает, что вы собираетесь передавать данные и посылает их отдельно. То есть, ответ буферизуется до первого куска тела ».
Я пробовал придерживаться response.end()
после response.write("2")
, но он все равно не сработает.
Как очистить выход или отключить потоковое вещание?
Как насчет цикла for, который записывает элементы массива в ответ, работает ли это, например, с помощью большого массива? – supertopi
Эй, только что вернулся с моего обеда. Он работает правильно для небольших массивов (я возвращаю только небольшие массивы). – Eamorr
Вы не должны использовать кодировку 'binary'. Не уверен, что это источник проблемы. – loganfsmyth