ошибка ax ios .post () о круговой структуре - PullRequest
0 голосов
/ 21 июня 2020

Пожалуйста, помогите мне, если я неправильно использую ax ios. Этот простой фрагмент кода может запускаться напрямую:

const axios = require('axios')

axios.post('https://exp.host/--/api/v2/push/send', {"to":["ExponentPushToken[xxxxxxx]"],"title":"test title","body":"test body."})
  .then(responseExpo => {
     console.log("expo replied normally: " + JSON.stringify(responseExpo));
  })
  .catch(error => {
    console.log("expo replied with error: " + JSON.stringify(error,null,4));
  });

Результат:

Promise { <pending> }
expo replied with error: {}

«ax ios»: «^ 0.19.2»

Я попытался опубликовать с помощью инструментов api и увидеть ответ с обычным кодом состояния 200:

{
  "data":[
  {
    "status": "error",
    "message": "\"ExponentPushToken[xxxxxxx]\" is not a registered push notification recipient",
    "details":{
      "error": "DeviceNotRegistered"
    }
  }
  ]
}

(вы можете игнорировать «ошибку»: «DeviceNotRegistered» внутри этого json, потому что это ожидается, потому что я поставил недопустимое входное значение xxxxx при вызове API. Даже при вводе допустимого входного значения результат все равно возвращается в блок catch с пустой ошибкой)

Я ожидаю, что он вернется в блок then, потому что на самом деле сервер ответ с 200 с хорошо отформатированным json результатом. Я сделал что-то не так, чтобы вызов вернулся в блок catch? Поскольку ошибка пуста, я понятия не имею, что пошло не так.

=============================== после напоминания jfriend я изменил отображение ошибки напрямую.

console.log ("expo ответил с ошибкой:" + ошибка);

теперь это отображается так:

Promise { <pending> }
expo replied with error: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'ClientRequest'
    |     property 'socket' -> object with constructor 'TLSSocket'
    --- property '_httpMessage' closes the circle

Кто-нибудь может сообщить мне, что именно это означает, и посоветовать мне, как исправить мое использование?

1 Ответ

0 голосов
/ 24 июня 2020

(проблема решена). ответ (responseExpo в вопросе) не является ни простыми данными JSON, ни простой строкой. это объект с (см. github.com/axios/axios#response-schema) некоторыми атрибутами. Настоящее содержимое ответа находится внутри response.data. Я ошибочно рассматривал ответ как простой объект json или содержимое ответа http.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...