Skip to content

kuitos/axios-extensions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

32 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

axios-extensions

npm version coverage npm downloads Build Status

A non-invasive, simple, reliable collection of axios extension

Extension List

Installing

npm i axios-extensions -S

or

yarn add axios-extensions

Usage

import axios from 'axios'; import { cacheAdapterEnhancer, throttleAdapterEnhancer } from 'axios-extensions'; // enhance the original axios adapter with throttle and cache enhancer  const http = axios.create({ baseURL: '/', headers: { 'Cache-Control': 'no-cache' }, adapter: throttleAdapterEnhancer(cacheAdapterEnhancer(axios.defaults.adapter, true)) });

Enable Logging

It is highly recommended to enable the request logging recorder in development environment(it is disabled in default).

browser (webpack)

new webpack.DefinePlugin({ 'process.env.LOGGER_LEVEL': JSON.stringify('info') })

node

// package.json "scripts": { "start": "cross-env LOGGER_LEVEL=info node server.js" }

API

cacheAdapterEnhancer(adapter, cacheEnabledByDefault = false, enableCacheFlag = 'cache', defaultCache = new LRUCache({ maxAge: FIVE_MINUTES })) : enhancedAdapter

makes axios cacheable

basic usage

import axios from 'axios'; import { cacheAdapterEnhancer } from 'axios-extensions'; const http = axios.create({ baseURL: '/', headers: { 'Cache-Control': 'no-cache' }, // cache will be enabled by default adapter: cacheAdapterEnhancer(axios.defaults.adapter, true) }); http.get('/users'); // make real http request http.get('/users'); // use the response from the cache of previous request, without real http request made http.get('/users', { cache: false }); // disable cache manually and the the real http request invoked

custom cache flag

const http = axios.create({ baseURL: '/', headers: { 'Cache-Control': 'no-cache' }, // disable the default cache and set the cache flag adapter: cacheAdapterEnhancer(axios.defaults.adapter, false, 'useCache') }); http.get('/users'); // default cache was disabled and then the real http request invoked  http.get('/users', { useCache: true }); // make the request cacheable(real http request made due to first request invoke) http.get('/users', { useCache: true }); // use the response cache from previous request

more advanced

Besides configuring the request through the cacheAdapterEnhancer, we can enjoy more advanced features via configuring every individual request.

import axios from 'axios'; import { cacheAdapterEnhancer, Cache } from 'axios-extensions'; const http = axios.create({ baseURL: '/', headers: { 'Cache-Control': 'no-cache' }, // disable the default cache and set the cache flag adapter: cacheAdapterEnhancer(axios.defaults.adapter, false) }); http.get('/users', { cache: true }); // make the request cacheable(real http request made due to first request invoke) // define a cache manually const cacheA = new Cache(); // or a cache-like instance const cacheB = { get() {/*...*/}, set() {/*...*/}, del() {/*...*/} }; // two actual request will be made due to the different cache  http.get('/users', { cache: cacheA }); http.get('/users', { cache: cacheB }); // a actual request made and cached due to force update configured http.get('/users', { cache: cacheA, forceUpdate: true });

throttleAdapterEnhancer(adapter, threshold = 1000, cacheCapacity = 10) : enhancedAdapter

throttle requests most once per threshold milliseconds

import axios from 'axios'; import { throttleAdapterEnhancer } from 'axios-extensions'; const http = axios.create({ baseURL: '/', headers: { 'Cache-Control': 'no-cache' }, adapter: throttleAdapterEnhancer(axios.defaults.adapter, 2 * 1000) }); http.get('/users'); // make real http request http.get('/users'); // responsed from the cache http.get('/users'); // responsed from the cache setTimeout(() => { http.get('/users'); // after 2s, the real request makes again }, 2 * 1000);

About

🍱 axios extensions lib, including throttle, cache, retry features etc...

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 11