uni-app封装一个ajax请求2

当前请求比较常规的方法

const config = Symbol('config')

let ajax={
    // 默认配置
    config :{
        baseURL: '',
        header: {
            'Content-Type':'application/json;charset=UTF-8',
            'Content-Type':'application/x-www-form-urlencoded'
        },  
        method: 'GET',
        dataType: 'json',/* 如设为json,会对返回的数据做一次 JSON.parse */
        responseType: 'text',
    },
     //路由 不拦截登录的页面
    filterPages: ['pages/index/index','pages/login/login', 'pages/sign/sign', 'pages/login/forgetPass'],
     //设置拦截器
    interceptors :{
         request:null,
         response:null
    },
    //请求
    request(options){
        let _this=this;
        options.baseURL = options.baseURL || _this.config.baseURL;
        options.dataType = options.dataType || _this.config.dataType;
        options.data = options.data || {};
        options.url = options.baseURL + options.url;
        options.method = options.method || _this.config.method;
        return new Promise((resolve, reject) => {
            options.success=(res)=>{
                let statusCode = res.statusCode;
                //如果响应的状态时200,表示成功了
                if (statusCode === 200) { 
                    //但是 如果我当前的请求数据为空,说明token过期了或者其他
                    if(res.data.code==-1){
                        //那么就获取当前的路由
                        let pages = getCurrentPages()
                        let currentRouter=null;
                        //#ifdef H5
                             currentRouter = pages[0].$page.path
                        //#endif
                        //#ifdef APP-PLUS
                             currentRouter = pages[pages.length - 1].route
                        //#endif
                        //看我当前是不是在我拦截的路由上进行的请求,如果是那就没啥,如果不是的话,那么请求失败了就要默认跳转至登录页
                        if(_this.config.filterPages.indexOf(currentRouter) == -1){
                            uni.redirectTo({
                                url: '/pages/login/login',
                            });
                        }
                    }
                    //并且把请求的内容返回去
                    resolve(res.data);
                }else if(statusCode === 401){
                    uni.reLaunch({
                        url: '/pages/login/login'
                    });
                }
            },
            options.fail=(err)=>{
                reject(res.err)
            }
            /*
                uni.request({
                    url: 'https://www.example.com/request', ---->options.url
                    data: {},----------------------------------->options.data
                    header: {},--------------------------------->暂时没用
                    success: (res) => {}------------------------>options.success
                });
            */
           //把此对象传入uni的ajax请求方法中去,然后resolve(res.data);就是请求来的结果
            uni.request(options)
        
        })

    },
    get(url, data={}, options = {}) {
        options.url = url
        options.data = data;
        //判断是否有token;
        options.data.token = data.token || uni.getStorageSync('token')
        options.method = 'GET'
        return ajax.request(options)
    },
    post(url, data={}, options = {}) {
        options.url = url
        options.data = data
        options.data.token = data.token || uni.getStorageSync('token')
        options.data.lang = data.lang || uni.getStorageSync('locale')
        options.method = 'POST'
        return ajax.request(options)
    }
}
export default ajax

main.js

import http from './base/http.js'
Vue.prototype.$get = http.get;
Vue.prototype.$post = http.post;

使用

          getMymoney(){
                this.$post('api/quotes/assets').then((res)=>{
                    console.log(res)
                })
            },

你可能感兴趣的:(uni-app封装一个ajax请求2)