#node.js #rest #fetch #mailchimp-api-v3.0
#node.js #остальное #извлечение #mailchimp-api-v3.0
Вопрос:
Я пытаюсь вернуть список измененных элементов из mailchimp API, который возвращает следующий (правильный) json, если я использую curl / Postman:
{
"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, которая, на мой взгляд, предполагает, что она находится на полпути к получению данных, и обещание выборки не должно было быть выполнено. Он довольно большой, поэтому я включаю то, что считаю ключевыми битами информации:
{
"_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()
возвращает обещание, которое преобразуется в объект ответа, который, в свою очередь, имеет различные методы ( .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)
});