uniapp 模拟请求自身的JSON模拟数据
迪丽瓦拉
2024-04-04 03:21:17
0

/**
 * 我们可以在main.js中引用/config/request.js,注意引用的位置,需要在new Vue得到Vue实例之后,如下:
 * // 引入请求封装,将app参数传递到配置中
 * require('/config/request.js')(app)
 **/
// 此vm参数为页面的实例,可以通过它引用vuex中的变量

module.exports = (vm) => {
    // 初始化请求配置
    uni.$u.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL = '100'; /* 根域名 */
        return config
    })
    
    // 请求拦截
    uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
    
        if(config.baseURL=="100"){ //模拟 
            config.baseURL ="http://IP:8080/static/server/data.json"; 
            config.url="";
            config.method ="GET";
            config.header={
                'Access-Control-Allow-Origin':'*',
                'Access-Control-Allow-Headers':'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild',
                'Access-Control-Allow-Methods':'PUT, POST, GET, DELETE, OPTIONS'
            };
            //console.log(config);
        }else{
            // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
            config.data = config.data || {}
            // 根据custom参数中配置的是否需要token,添加对应的请求头
            if(config?.custom?.auth) {
                // 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中
                config.header.token = vm.$store.state.userInfo.token
            }
        }
        return config 
    }, config => { // 可使用async await 做异步操作
        return Promise.reject(config)
    })
    
    // 响应拦截
    uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
        const data = response.data;
        if(data.code == 200001){ //模拟数据
            let api_url=response.config.data.url;
            return data.data[api_url];//返回模拟数据
        }else{
            return data.data === undefined ? {} : data.data
        }
    }, (response) => { 
        // 对响应错误做点什么 (statusCode !== 200)
        return Promise.reject(response)
    })
}

/static/server/data.json 格式

{
    "code": 200001,  //返回状态; 200:成功 ;   200001:本地模拟返回
    "data":{
        "api_publicApi_init":{   //初始化接口返回数据
            "ewsdsd":"wesdsd"
        }
    }
}

相关内容