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