Mailchimp API 在使用 node-fetch 而不是 json 时返回一个大的 gzip 对象
Posted
技术标签:
【中文标题】Mailchimp API 在使用 node-fetch 而不是 json 时返回一个大的 gzip 对象【英文标题】:Mailchimp API returning a large gzip object when using node-fetch rather than json 【发布时间】:2017-02-28 18:16:49 【问题描述】:我正在尝试从 mailchimp API 返回已更改成员的列表,如果我使用 curl/Postman,它将返回以下(正确的)json:
"members": [
"id": "187fhdy650b10e8d43552b6c3672368212",
"email_address": "example@email.co.uk",
"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 结构,对我来说这表明它正在接收数据的中途,并且 fetch 承诺不应该解决。它很大,所以我将我认为的关键信息包括在内:
"_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 调用的吗?
【问题讨论】:
【参考方案1】:所以试试这个:
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)
);
【讨论】:
以上是关于Mailchimp API 在使用 node-fetch 而不是 json 时返回一个大的 gzip 对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 API 3.0 实现 Mailchimp 双重选择加入
当我尝试使用 Retrofit 访问 MailChimp 的 API 时,API 密钥总是丢失
Mailchimp double_optin => false 在 mailchimp-api-ruby 中不起作用
使用 API 将 Mailchimp 集成到 Laravel