2016-10-19 4 views
0

Я пытаюсь вернуть список измененных членов из API mailchimp, который возвращает следующий (правильный) json, если я использую curl/Postman:API Mailchimp, возвращающий большой объект gzip при использовании node-fetch, а не json

{ 
    "members": [ 
    { 
     "id": "187fhdy650b10e8d43552b6c3672368212", 
     "email_address": "[email protected]", 
     "unique_email_id": "2edbhgy73836", 
     "email_type": "html", 
     "status": "unsubscribed", 
     "merge_fields": { 
     "FNAME": "", 
     "LNAME": "", 
     "MMERGE5": "", 
     //etc.... 

Я хочу вернуть этот объект с помощью приложения Node, поэтому я использую node-fetch следующим образом:

fetch(`https://us5.api.mailchimp.com/3.0/lists/<listid>/members?since_last_changed=2016-10-18T23:10:18+00:00`, {headers: authHeader}) 
    .then((response) => { 
    if (response.ok) { 
     res.status(response.status).send(response) 
    } else { 
     res.status(response.status).send(response) 
    } 
    }).catch((error) => { 
     res.status(500).send(error.message) 
    })}) 

Это возвращает совершенно другую структуру JSON, который мне предполагает, что это на полпути через получающего данные и обещание выборки не должны быть разрешены. Это довольно большой, поэтому я в том числе то, что я вижу, как ключевые биты информации:

{ 
    "_opts": {}, 
    "_chunkSize": 16384, 
    "_readableState": { 
"objectMode": false, 
"highWaterMark": 16384, 
"buffer": [], 
"length": 0, 
"pipes": null, 
"pipesCount": 0, 
"flowing": null, 
"ended": false, 
"endEmitted": false, 
"reading": false, 
"sync": false, 
"needReadable": true, 
"emittedReadable": false, 
"readableListening": false, 
"resumeScheduled": false, 
"defaultEncoding": "utf8", 
"ranOut": false, 
"awaitDrain": 0, 
"readingMore": false, 
"decoder": null, 
"encoding": null 
}, 
"readable": true, 
"domain": null, 
"_events": { 
"end": [ 
    null, 
    null 
] 
}, 
"_eventsCount": 7, 
"_writableState": { 
    "objectMode": false, 
    "highWaterMark": 16384, 
    "needDrain": false, 
    "ending": true, 
    "ended": true, 
    "finished": false, 
    "decodeStrings": true, 
    "defaultEncoding": "utf8", 
    "length": 2674, 
    "writing": true, 
    "corked": 0, 
    "sync": false, 
    "bufferProcessing": false, 
    "writelen": 2674, 
    "bufferedRequest": null, 
    "lastBufferedRequest": null, 
    "pendingcb": 1, 
    "prefinished": false, 
    "errorEmitted": false, 
    "bufferedRequestCount": 0, 
    "corkedRequestsFree": { 
    "next": null, 
    "entry": null 
    } 
}, 
"writable": false, 
"allowHalfOpen": true, 
"_transformState": { 
"needTransform": false, 
"transforming": true, 
"writechunk": { 
    "type": "Buffer", 
    "data": [ 
    31, 
    139, 
    8, 
    0, 
    0, 
    0, 
    0, 
    0, 
    198,.... 

Я пытался разборе это по-разному, например, чтение réponse первый:

.then((response) => { 
    response.text()}) 
.then((response) => { 
    res.status(200).send(response) 
}) 

который возвращает неопределенный объект. там

.then((response) => { 
    res.status(200).send(response.json()) 
}) 

который возвращает пустой объект {}

ли что-нибудь еще я могу попробовать с моей выборки называют: А также парсинга как JSON?

ответ

0

fetch() возвращает обещание, устраняющее в объект ответа, который, в свою очередь, имеет различные методы (.text(), .json()), возвращающие обещания, которые разрешают в теле ответа.

Так попробуйте это:

fetch(`https://us5.api.mailchimp.com/3.0/lists/<listid>/members?since_last_changed=2016-10-18T23:10:18+00:00`, {headers: authHeader}) 
    .then(response => { 
    res.status(response.status); 
    return response.json(); 
    }).then(body => { 
    res.send(body); 
    }).catch(error => { 
    res.status(500).send(error.message) 
    });