NSwagStudio是一块自动生成swagger api文件的工具,在微信小程序中由于没有http模块,所以需要改造下axios的请求
1.创建axios的实例并做请求与响应拦截
【request-interceptor.ts】
import axios from "axios";
import { UniAdapter } from './uniAdapter';
import { InternalAxiosRequestConfig } from "axios";
const instance = axios.create({
transformResponse: (data) => data,
withCredentials: true,
adapter: UniAdapter as any, //微信小程序没有http模块,所以改造了axios的内部请求,实际使用uni.request
});
// 请求拦截
instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
//...逻辑代码
})
//响应拦截
instance.interceptors.response.use((res: any) => {
//...逻辑代码
},
);
export default instance;
【uniAdapter.ts】
import axios from 'axios';
export { default } from 'axios';
const getResponse = (res, config) => {
const { statusCode, errMsg } = res;
const response = {
...res,
status: statusCode,
statusText: errMsg,
config,
request: null,
};
return response;
};
const uniAdapter = (config) => {
if (!uni) {
throw new Error("请在uniapp项目使用!");
}
return new Promise((resolve, reject) => {
const { baseURL, url, headers, data, params } = config;
const uniConfig = {
...config,
url: url,
header: {...config.headers},
};
if (data || params) {
try {
uniConfig.data = JSON.parse(data || params);
} catch (e) {
uniConfig.data = data || params;
}
}
uni.request({
...uniConfig,
success(res) {
const response = getResponse(res, config);
resolve(response);
},
fail(res) {
const response = getResponse(res, config);
reject(response);
},
});
});
};
const UniAdapter = uniAdapter;
axios.defaults.adapter = uniAdapter as any;
export { UniAdapter };
【NswagStudio】生成代码示例
使用方法