Это просто обнаружение изменений в Angular2 при работе, вызывающее loadProperty(i,element)
снова и снова в каждом цикле обнаружения изменений.
Методы вызова из шаблона обескуражены, потому что они вызываются очень часто. Вместо этого вы должны сохранить результат в свойстве и привязать его к этому свойству.
Я тоже не мог получить запрос на работу, поэтому вместо этого использовал http.
var http = require("http"),
zlib = require("zlib");
function getGzipped(url, callback) {
// buffer to store the streamed decompression
var buffer = [];
http.get(url, function(res) {
// pipe the response into the gunzip to decompress
var gunzip = zlib.createGunzip();
res.pipe(gunzip);
gunzip.on('data', function(data) {
// decompression chunk ready, add it to the buffer
buffer.push(data.toString())
}).on("end", function() {
// response and decompression complete, join the buffer and return
callback(null, buffer.join(""));
}).on("error", function(e) {
callback(e);
})
}).on('error', function(e) {
callback(e)
});
}
getGzipped(url, function(err, data) {
console.log(data);
});
Как и @Iftah, установите encoding: null
.
Полный пример (меньше обработки ошибок):
request = require('request');
zlib = require('zlib');
request(url, {encoding: null}, function(err, response, body){
if(response.headers['content-encoding'] == 'gzip'){
zlib.gunzip(body, function(err, dezipped) {
callback(dezipped.toString());
});
} else {
callback(body);
}
});
Как видно из https://gist.github.com/miguelmota/9946206 :
Оба запроса и запроса-обещания обрабатывают его из коробки по состоянию на декабрь 2017 года :
var request = require('request')
request(
{ method: 'GET'
, uri: 'http://www.google.com'
, gzip: true
}
, function (error, response, body) {
// body is the decompressed response body
console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity'))
console.log('the decoded data is: ' + body)
}
)
попробуйте добавить encoding: null
к параметрам, которые вы передаете в request
, это позволит избежать преобразования загруженного тела в строку и сохранить его в двоичном буфере.
Вот мои две центы. У меня была та же проблема, и я нашел классную библиотеку под названием concat-stream
:
let request = require('request');
const zlib = require('zlib');
const concat = require('concat-stream');
request(url)
.pipe(zlib.createGunzip())
.pipe(concat(stringBuffer => {
console.log(stringBuffer.toString());
}));
На самом деле модуль запроса обрабатывает ответ gzip. Чтобы сообщить модулю запроса декодировать аргумент body в функции обратного вызова, мы должны установить значение «gzip» в опции. Позвольте мне объяснить вам пример.
var opts = {
uri: 'some uri which return gzip data',
gzip: true
}
request(opts, function (err, res, body) {
// now body and res.body both will contain decoded content.
})
Примечание. Данные, которые вы получаете в случае «ответа», не декодируются.
работает на меня. Надеюсь, что это сработает и для вас, ребята.
Аналогичная проблема, с которой мы столкнулись, работая с модулем запроса, связана с разбором JSON. Позвольте мне объяснить это. Если вы хотите, чтобы модуль запроса автоматически анализировал тело и предоставлял вам содержимое JSON в аргументе body. Затем вам нужно установить «json» в true.
var opts = {
uri:'some uri that provides json data',
json: true
}
request(opts, function (err, res, body) {
// body and res.body will contain json content
})
Ссылка: https://www.npmjs.com/package/request#requestoptions-callback
Я сформулировал более полный ответ , пытаясь разыгрывать разные способы уничтожения и решая ошибки, связанные с кодированием.
Надеюсь, это вам тоже поможет:
var request = require('request');
var zlib = require('zlib');
var options = {
url: 'http://some.endpoint.com/api/',
headers: {
'X-some-headers' : 'Some headers',
'Accept-Encoding' : 'gzip, deflate',
},
encoding: null
};
request.get(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
// If response is gzip, unzip first
var encoding = response.headers['content-encoding']
if (encoding && encoding.indexOf('gzip') >= 0) {
zlib.gunzip(body, function(err, dezipped) {
var json_string = dezipped.toString('utf-8');
var json = JSON.parse(json_string);
// Process the json..
});
} else {
// Response is not gzipped
}
}
});
С помощью got
, альтернативы request
, вы можете просто выполнить:
got(url).then(response => {
console.log(response.body);
});
Декомпрессия обрабатывается автоматически, когда это необходимо.
Вот рабочий пример (с использованием модуля запроса для узла), который запускает ответ
function gunzipJSON(response){
var gunzip = zlib.createGunzip();
var json = "";
gunzip.on('data', function(data){
json += data.toString();
});
gunzip.on('end', function(){
parseJSON(json);
});
response.pipe(gunzip);
}
Полный код: https://gist.github.com/0xPr0xy/5002984
var gunzip = gzip.createGunzip();
должна бытьvar gunzip = zlib.createGunzip();
– mlunoe 15 April 2013 в 00:23