NodeJS возвращает мусор JSON

Я пытаюсь написать простой кусок кода, используя NodeJS, чтобы вернуть JSON из API обмена стека.

Это API, на который я нацеливаюсь - https :? //api.stackexchange.com/2.2/users порядок = DESC & амп; сортировки = репутации & Amp; inname = Донал% 20rafferty & амп; сайт = StackOverflow

А вот и мой код:

var https = require('https'); //Use NodeJS https module

function getUserDataByName(userName, callback){

var stackOverflowUserURL = 'https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname='+encodeURIComponent(userName)+'&site=stackoverflow';

https.get(stackOverflowUserURL, function(response){
    console.log("headers: ", response.headers);
    if (response.statusCode == 200) {
        var jsonString = '';
        response.on('data', function (chunk) {
            jsonString += chunk;
        });
        response.on('end', function () {
            console.log((jsonString));
            callback(JSON.stringify(jsonString));
        });
    }
    else{
        //error
        console.log("Error");
    }
});
}

Однако, когда я запускаю это, данные всегда возвращаются в состоянии мусора, как текст, как показано ниже:

  

\ "\ u001f \ Ь \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0004 \ u0000uRn0 \ Fb ږ \ u00132 \ u0010R �m�u\\u0018\\u0004ڢ\\u001d!��Jr=�ȿ�vS\\u0004\\u0005������H����C 7 ր Qn \ u0012 \ u0014 {г \\ "] + ZV \ u001f (V% |) QU.O \ u000e \ u0012Ѹ \ u0005 \ u0003 \ u00130a \ u0006BSӨC ^ БВУ \ u000bCb \ u0017e \ u0013q \\ "DlO` @ ^ \ пд \ u0017 |? ի pFziR \ u000f, [пу {х \ б ~ kLUV \ u0012 \ u00194l \ u000e ڕ \ Rw \ u001c * \ u001a9 \ u001eQ + Q > O; а '\ btIb /   \ U0007CK \ u0000j ۯ \ u0003g | \ u0003 \ u0002 \ u0000 \ u0000 \

Я предполагаю, что что-то не так с моим кодированием /декодированием, но я не могу понять, что делать, чтобы это исправить?

7 голосов | спросил Donal Rafferty 20 PMpMon, 20 Apr 2015 23:06:59 +030006Monday 2015, 23:06:59

1 ответ


0

Вам нужно расшифровать ответ, когда он распакован

var https = require('https'); //Use NodeJS https module
var zlib = require("zlib");

function getUserDataByName(userName, callback){

var stackOverflowUserURL = 'https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname='+encodeURIComponent(userName)+'&site=stackoverflow';

https.get(stackOverflowUserURL, function(response){
    console.log("headers: ", response.headers);
    console.log(response.statusCode)
    if (response.statusCode == 200) {
        var gunzip = zlib.createGunzip();
        var jsonString = '';
        response.pipe(gunzip);
        gunzip.on('data', function (chunk) {
            jsonString += chunk;
        });
        gunzip.on('end', function () {
            console.log((jsonString));
            callback(JSON.stringify(jsonString));
        });
        gunzip.on('error', function (e) {
          console.log(e);
        });
    }
    else{
        //error
        console.log("Error");
    }
});
}
ответил Transcendence 20 PMpMon, 20 Apr 2015 23:30:02 +030030Monday 2015, 23:30:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132