easy-mock能实现部分接口用真数据么
来源:4-12 Mock设置(1)

JY_Kong
2020-03-27
在实际项目中会遇到这样的问题:就是一个项目有很多接口、很多需求,但是我们当前开发需要关注的就只有几个接口,所以如果想实现,那些无关的接口使用真实的接口数据,而当前开发需要调试的那几个接口就使用easy-mock数据,这个要怎么才能实现呢?
我试过配置了axios.defaults.baseURL,但是一配置这个,要么就全部使用了真实数据,要么就全部使用了easy-mock的数据,所以觉得这个是改动“全局”的,不能解决以上问题。
请教一下老师,有没有能解决的方法~
2回答
-
有。你这个问题提的非常好,现实工作当中确实会有这种情况,局部部分新开发接口需要做mock,其它接口对接线上。那我个人的经验和做法:
需要重新封装一下axios插件,从新定义一个新的方法比如request,接受请求的方法和参数,在request里面调用axios,这样我们就能根据传进来的参数判断是走真实接口还是mock。012020-03-28 -
河畔一角
2020-03-28
//axios.js文件
export default {
request(url,data={},options={loading:true,mock:false}){
let loading = document.getElementById('ajaxLoading');
if (options.loading){
loading.style.display = 'block';
}
let baseApi = '/api';
//局部mock
if(options.mock){
// 一、直接加载mock文件
require('./mock/api');
// 二、对接easy-mock
baseApi = 'https://www.easy-mock.com/mock/5dc7afee2b69d9223b633cbb/mimall'
}
return new Promise((resolve,reject)=>{
axios({
url:url,
method:options.method || 'get',
baseURL:baseApi,
timeout:options.timeout || 5000,
params: data
}).then((response)=>{
if (options.loading) {
loading.style.display = 'none';
}
if (response.status == '200'){
let res = response.data;
if (res.code == '0'){
resolve(res.data);
}else{
Message.error(res.msg);
}
}else{
reject(response.data);
}
}).catch(()=>{
loading.style.display = 'none';
})
});
}
}
//用法
import Axios from 'util/axios'
Axios.request('/products',{
categoryId:100012,
pageSize:14
},{ mock:true }).then((res)=>{
//to-do...
})
//或者直接挂载到Vue原型上
Vue.prototype.$request = Axios.request
this.$request('/products',{
categoryId:100012,
pageSize:14
},{ mock:true }).then(()=>{
//to-do...
})
130
相似问题