NSwagStudio + uniapp + axios 解决方案

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】生成代码示例

使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值