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

无法让 MailChimp 使用带有 Curl 的 API 保存我的数据

Mailchimp api 3.0错误:“Schema描述对象,找到数组”是代码还是在mailchimp的结尾?