2016-10-19 25 views
0

我想從mailchimp API返回已更改的成員列表,如果使用curl/Postman,它將返回以下(正確)json:Mailchimp API在使用node-fetch而不是json時返回大的gzip對象

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

我想用一個節點應用程序返回這個對象,所以我用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結構,這對我意味着它是中途數據和提取承諾不應該resolv編輯。這是相當大的,所以我包括我所看到的信息的鍵位:

{ 
    "_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,.... 

我已經嘗試以不同的方式解析此,如首先讀取的回覆:

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

它返回一個未定義的對象。而且還解析爲JSON:

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

它返回一個空對象{}

,請問有什麼更多的,我可以用我的fetch調用試試?

回答

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) 
    }); 
相關問題