Представьте, что вы ждете новую пару обуви по почте. Иногда по независящим от них обстоятельствам — например, сильный шторм или перекрытие дороги — почтовой службе приходится разворачиваться и помечать посылку как недоставленную. Но вам нужны эти новые Джорданы сегодня! Нельзя ли повторить попытку доставки посылки?!

Введите Axios-Retry: он повышает отказоустойчивость ваших приложений, автоматически повторяя неудачные запросы, и гарантирует, что ваши пользователи получат ожидаемые данные.

Начало работы с Axios-Retry

Чтобы начать пользоваться преимуществами Axios и Axios-Retry, установите их с помощью NPM:

npm i axios axios-retry

Затем в файле Node.js импортируйте Axios и Axios-Retry:

// CommonJS
const axios = require('axios');
const axiosRetry = require('axios-retry');

// ES6 Modules
import axios from 'axios';
import axiosRetry from 'axios-retry';

Когда в вашем проекте есть Axios и Axios-Retry, вы настраиваете Axios-Retry, передавая экземпляр Axios и объект параметров. Наиболее важным параметром для установки является «повторные попытки», который определяет, сколько раз следует повторить неудачный запрос:

axiosRetry(axios, { retries: 3 });

Но красота Axios-Retry заключается в ее гибкости. Вы также можете указать функцию retryDelay, которая управляет задержкой между повторными попытками, или retryCondition, чтобы задать условия, при которых повторяется неудачный запрос. По умолчанию Axios-Retry повторяет запрос, если обнаруживает сетевую ошибку или ошибку 5xx.

/* === Optional configuration options === */

// Custom retry delays

// Retries 1000ms on first retry, 2000ms on second retry, etc.
axiosRetry(axios, { retryDelay: (retryCount) => {
  return retryCount * 1000;
}});

// Exponential back-off delay option
axiosRetry(axios, { retryDelay: axiosRetry.exponentialDelay });

// Custom callback upon request retry

// Logs retry count to console
axiosRetry(axios, { onRetry: (count) => console.log(`Retry attempt ${count}...`)});

Вы также можете использовать Axios-Retry для настраиваемых экземпляров клиента Axios. Это мой любимый способ использования библиотеки, чтобы мой код оставался чистым и модульным:

// axios-client.js

import axios from "axios";
import axiosRetry from "axios-retry";

const client = axios.create({options});

axiosRetry(client, {
  // retry request up to 3 times 
  retries: 3,
  // wait 1000ms and an additional 1000ms for each subsequent request
  retryDelay: (retryCount) => 1000 * retryCount,
  // retry on every failed request regardless of reason
  retryCondition: () => true,
  // log retries for monitoring of request issues
  onRetry: (retryCount) => console.log(`Request timed out. Retrying... (${retryCount})`),
});

export default client;

Давайте проиллюстрируем мощь Axios-Retry на простом примере кода, который извлекает данные из общедоступного API, JSONPlaceholder:

import client from './axios-client.js';

/* in this scenario, the request fails 2 times before returning data */

cleint.get('https://jsonplaceholder.typicode.com/posts')
  .then(function(response) {
    console.log('Success!');
    console.log(response.data);
  })
  .catch(function(error) {
    console.log('Failure!');
    console.log('NO DATA FOR YOU!');
 });

/* CONSOLE OUTPUT 

=== With Axios-Retry ===

Request timed out. Retrying... (1)
Request timed out. Retrying... (2)
Success!
[{JSON DATA}]

=== Without Axios-Retry ===

Failure!
NO DATA FOR YOU!

*/

Благодаря Axios-Retry ваше приложение автоматически повторяет попытку в случае сбоя запроса к API, увеличивая шансы на успешное получение необходимых данных.

Таким образом, Axios-Retry — бесценный инструмент для повышения устойчивости ваших приложений Node.js. Это помогает гарантировать, что ваши запросы API не будут потеряны из-за временных проблем, повышая надежность вашего приложения и улучшая взаимодействие с пользователем. Это как иметь выделенного почтового работника, который не успокоится, пока каждое «письмо» (запрос API) не будет успешно доставлено.

По мере продвижения ваших проектов Node.js не забудьте подумать о реализации Axios-Retry. Удачного кодирования, и пусть ваши запросы всегда доходят до места назначения!

#axios, #axiosretry, #javascript, #nodejs, #programming, #coding, #API, #webdevelopment, #backend, #resilency, #httprequests, #codingbestpractices

Спасибо, что нашли время прочитать эту статью. Пожалуйста, не стесняйтесь хлопать в ладоши, чтобы показать свою поддержку и поделиться ею в своей сети!

Если вам интересно узнать больше о программировании, передовых методах кодирования и постоянно развивающемся технологическом ландшафте, нажмите кнопку «Подписаться».

Помните, мы все здесь, чтобы учиться, расти и помогать друг другу. Оставайтесь любопытными и удачного кодирования!

Стивен Ривас

https://stephenrivas.com