likes
comments
collection
share

axios-mock-adapter(使用小记)

作者站长头像
站长
· 阅读数 22

利用mock模拟项目api

原理

  • 利用axios发起请求
  • 利用axios-mock-adapter处理拦截请求

核心实现代码

# mock创建
const MockAdapter = require('axios-mock-adapter');

const axios = require('axios');

const Mock = new MockAdapter(axios);

Mock.onGet("/api/super-store/big-discounts").reply(async () => {
  try {
    return [200, bigDiscountList];
  } catch (err) {
    console.error(err);
    return [500, {
      message: "Internal server error"
    }];
  }
});

## replay 是回复,模拟你请求后的response
## get 用 onGet post 用 onPost
## 正则直接写  mock.onGet(/\/users\/\d+/) 
## 你如果带参数请求,mock的replay里面的函数,应该这样写

(config)=>{
    JSON.parse(config.data)//解析axios传过来的值
    你可以用
}
## 如果想模拟网络延迟,
var mock = new MockAdapter(axiosInstance, { delayResponse: 2000 });

## 如果你想引入很多mock接口,并全部匹配这些请求
例如:

const MockAdapter = require('axios-mock-adapter');

const axios = require('axios');

const Mock = new MockAdapter(axios);
import "./server/furniture-shop/productsDB";
import "./server/grocery3-shop/productsDB";
import "./server/related-products/productsDB";
Mock.onAny().passThrough();//这个是match all requests
axios-mock-adapter学习链接:https://www.npmjs.com/package...

常见问题

过程中可能出现的问题

error - Error: connect ECONNREFUSED 127.0.0.1:80

你写的axios请求url可能是 /api/ 等等,不带前缀的话,默认从你的80端口发请求你也可以用 axios.defaults.baseURL = '修改你的默认请求url'

造成这个的情况,1、你的mock可能没有把文件放到类似index文件中,就是你需要利用mock数据的文件2、如果你是使用框架react、vue或者集成两者的遍历框架,例如next。js等等,同理你需要找到对应文件添加,或者在类似app。js主文件中给全局引入