Axios interceptor providing support to JSON22 data format in your applications.
- Ready to use Axios interceptor
- Parse JSON22 body content
- Serialize data to JSON22
- Support for global interceptor as well as request level transformation
- Both CJS/ESM modules support
npm install json22-axios
Add interceptor at your client setup
import axios from 'axios';
import { Json22RequestInterceptor } from 'json22-axios';
axios.interceptors.request.use(Json22RequestInterceptor());
For old-fashioned javascript
const axios = require('axios');
const { Json22RequestInterceptor } = require('json22-axios');
axios.interceptors.request.use(Json22RequestInterceptor());
Both stringify and parse methods of JSON22 accepts options. You may be interested to define such options at global level as well as with isolated client instance.
Json22RequestInterceptor
accepts the next options structure
interface Json22AxiosOptions {
json22ParseOptions?: Json22ParseOptions;
json22StringifyOptions?: Json22StringifyOptions;
}
See also Json22ParseOptions
and Json22StringifyOptions
at JSON22 API description
import axios from 'axios';
import { Json22RequestInterceptor } from 'json22-axios';
import { TypedModel } from './models/typed-model.js';
axios.interceptors.request.use(Json22RequestInterceptor({
json22ParseOptions: { context: { TypedModel } },
}));
import axios from 'axios';
import { Json22RequestInterceptor } from 'json22-axios';
import { TypedModel } from './models/typed-model.js';
const client = axios.create();
client.interceptors.request.use(Json22RequestInterceptor({
json22ParseOptions: { context: { TypedModel } },
}));
In same rare cases you might be interested to set up data transformation for a specific query.
This case you shall not use the interceptor. Instead, you'll have to use data transformers functions.
Data transformers do not accept options, so you'll need to define it on query configuration at json22Options
.
import axios from 'axios';
import { transformJson22StringToData, transformDataToJson22String } from 'json22-axios';
import { TypedModel } from './models/typed-model.js';
export async function postData(data) {
const resp = await axios.request({
method: 'POST',
baseURL: 'https://example.com',
url: '/api/data',
transformResponse: transformJson22StringToData,
transformRequest: transformDataToJson22String,
json22Options: { json22ParseOptions: { context: { TypedModel } } },
data
});
return resp.data;
}
Note: json22Options
configuration field is not defined by axios.
That is the reason we do not recommend to use json22 data transformers directly.
Please, use interceptor instead.