Как справиться с 429 ошибками в ax ios с реагировать на родную? - PullRequest
0 голосов
/ 07 января 2020

У меня есть собственное приложение, которое использует MongoDB в качестве базы данных с express и node js. Я также использую Ax ios для связи с клиентом с сервером

Теперь приложение постоянно отправляет и быстро получает данные из базы данных, например, пользователь делает от 3 до 4 запросов к бэкенду и из него в секунду, когда приложение используется,

Все работает нормально, но ошибок 429, как справиться с этой ошибкой или предотвратить ее возникновение, не ставя под угрозу пользовательский опыт?

ниже приведен топор ios instanace

const instance = axios.create({ baseURL: 'http://9rv324283.ngrok.io' })

ниже приводится выборка данных из база данных

<NavigationEvents
onWillFocus={() => {

  try {

    const response = await instance.get('fetchNewDishes');

    this.setState({data: response.data})

  } catch(err) {

    console.log(err)

  }

}}>

ниже приведена отправка данных в базу данных

<TouchableOpacity onPress={() =>  instance.patch(`/postNewDish/${this.state.dish}`)}>
            <Text style={{ fontSize: 16, color: '#555', padding: 15 }}>Post Dish</Text>
  </TouchableOpacity>

Ответы [ 2 ]

1 голос
/ 07 января 2020

Я бы предложил вам использовать перехватчики ax ios для фактического отслеживания обработки ошибок в ax ios, см. Пример ниже:

import ax from 'axios';
import {config} from '../global/constant';

const baseUrl = config.apiUrl;

let axios = ax.create({
  baseURL: baseUrl,
  withCredentials: true,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
    'Access-Control-Allow-Origin': '*',
  },
});

axios.interceptors.request.use(req => handleRequest(req));
axios.interceptors.response.use(
  res => handleResponse(res),
  rej => handleError(rej),// here if its an error , then call handleError and do what you want to do with error.
);

// sending the error as promise.reject
const handleError = error => {
  let errorResponse = {...error};
  console.log({...error}, 'error');
  return Promise.reject({
    data: errorResponse.response.data,
    code: errorResponse.response.status,
  });
};

Надеюсь, это поможет. не стесняйтесь сомнений

0 голосов
/ 27 марта 2020

Вы контролируете бэкэнд? Возможно, существует промежуточное ПО, которое ограничивает запросы, такие как express-rate-limit

. Убедитесь, что вы отключили эти промежуточные программы или разрешаете гораздо больше запросов в минуту в конфигурациях промежуточного ПО.

...