Axios request/response object key case converts snake_case/camelCase.
In many cases, the API's naming convention differs from JavaScript/TypeScript's(ex API is snake_case, JavaScript/TypeScript is camelCase), which means developers need to convert the case of object key.
This library makes it easy for developers to convert case.
Features:
- Converts axios request
data
params
object keys into snake_case - Converts axios response
data
object keys into camelCase
With this library, you will be free from converting from camelCase to snake_case when making a request, and from converting from snake_case to camelCase in a response.
$ npm install simple-axios-case-converter
$ yarn add simple-axios-case-converter
import axios, { AxiosResponse } from 'axios';
import axiosCaseConverter from 'simple-axios-case-converter';
interface User {
id: number;
firstName: string;
lastName: string;
fullName: string;
}
// setting simple axios case converter
axiosCaseConverter(axios);
const res: AxiosResponse<User> = await axios.get('https://example.com/api/v1/me');
// you need not convert response `data` to camelCase (typeof res.data is `User`)
console.log(res.data);
// you need not convert request `params` to snake_case
axios.get('https://example.com/api/v1/todos', { params: { onlyComplete: true } });
// you need not convert request `data` to snake_case
axios.post('https://example.com/api/v1/address', {
countryCode: 'JP',
postalCode: '123-4567',
prefecture: 'Tokyo',
city: 'Shibuya'
});
// you need not convert request `data` to snake_case
axios.patch('https://example.com/api/v1/address/123', { postalCode: '123-4567' });
// you need not convert request `data` to snake_case
axios.delete('https://example.com/api/v1/address/123', { data: { addressId: 123 } });
import axios from 'axios';
import axiosCaseConverter from 'simple-axios-case-converter';
// setting simple axios case converter
axiosCaseConverter(axios);
const res = await axios.get('https://example.com/api/v1/me');
// you need not convert response `data` to camelCase
console.log(res.data);
// you need not convert request `params` to snake_case
axios.get('https://example.com/api/v1/todos', { params: { onlyComplete: true } });
// you need not convert request `data` to snake_case
axios.post('https://example.com/api/v1/address', {
countryCode: 'JP',
postalCode: '123-4567',
prefecture: 'Tokyo',
city: 'Shibuya'
});
// you need not convert request `data` to snake_case
axios.patch('https://example.com/api/v1/address/123', { postalCode: '123-4567' });
// you need not convert request `data` to snake_case
axios.delete('https://example.com/api/v1/address/123', { data: { addressId: 123 } });
Note that you should be require('...').default
.
const axios = require('axios');
const axiosCaseConverter = require('simple-axios-case-converter').default;
// setting simple axios case converter
axiosCaseConverter(axios);
// after, the implementation is the same as the ES Module implementation
axiosCaseConverter: (axios, options)
-> { requestInterceptorId: number, responseInterceptorId: number }
Optional
Type: object
Optional
Type: Array<string | RegExp>
Exclude keys from being snake-cased at request params
and data
.
Optional
Type: Array<string | RegExp>
Exclude keys from being camle-cased at response data
.
What is different from axios-case-converter
There is a library, axios-case-converter
, which provides similar functionality, but the differences from that library are as follows.
-
Simple
Various options can be specified foraxios-case-converter
, but that is also the flip side of complexity.
This library is very simple and simply converts request(data
,params
) and response(data
) cases to sanke_case/camelCase. -
No side effects
Theaxios-case-converter
overridesaxios.defaults
, which may cause unexpected side effects.
This library is simpler and safer because it uses theinterceptor
and does not rewrite the default config. -
Easily remove the case conversion feature
Sinceaxios-case-converter
overwritesaxios.defaults
(axios instance default config), if you want to removeaxios-case-converter
functionality, you need to updateaxios.defaults
again and will have a hard time.
Since this library usesinterceptor
, you can easily disable the functionality of this library byeject
as follows.const { requestInterceptorId, responseInterceptorId } = axiosCaseConverter(axios); axios.interceptors.request.eject(requestInterceptorId); axios.interceptors.response.eject(responseInterceptorId);