uniapp 拦截器


export default {
  config: {
    baseURL: 'https://xxx.xxx.com',
    header: {},
    dataType: 'json',
    // #ifndef MP-ALIPAY || APP-PLUS
    responseType: 'text',
    // #endif
    // 注:如果局部custom与全局custom有同名属性,则后面的属性会覆盖前面的属性,相当于Object.assign(全局,局部)
    custom: {
      auth: true
    }, // 全局自定义参数默认值
    // #ifdef MP-ALIPAY || MP-WEIXIN
    timeout: 30000,
    // #endif
    // #ifdef APP-PLUS
    sslVerify: true,
    // #endif
    // #ifdef H5
    // 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+)
    withCredentials: false,
    // #endif
    // #ifdef APP-PLUS
    firstIpv4: true, // DNS解析时优先使用ipv4 仅 App-Android 支持 (HBuilderX 2.8.0+)
    // #endif
    // 局部优先级高于全局,返回当前请求的task,options。请勿在此处修改options。非必填
    // getTask: (task, options) => {
    // 相当于设置了请求超时时间500ms
    //   setTimeout(() => {
    //     task.abort()
    //   }, 500)
    // },
    // 全局自定义验证器。参数为statusCode 且必存在,不用判断空情况。
    validateStatus: (statusCode) => { // statusCode 必存在。此处示例为全局默认配置
      console.log("---全局验证Code---", statusCode)
    }
  },
  // 请求拦截器配置
  beforeRequest: function (config) {
    console.log(config, "------")
    if (config.custom.auth) {
      // token
      let token = uni.getStorageSync('authenticate')
      config.header["authenticate"] = token
      console.log("token", token)
    } else {
      console.log("不需要token")
    }
    return config
  },
  // 响应拦截器配置
  beforeResponse: (response) => { /*  对响应错误做点什么 (statusCode !== 200)*/
    console.log(response, "????????")
    if (!response.config.custom.auth && response.statusCode == 200) {
      console.log("保存token")
      uni.setStorageSync('authenticate', response.data.token)
      return response
    }
    if (response.statusCode >= 500) {
      console.log("服务器异常")
      return Promise.reject(response)
    } else if (response.statusCode == 401) {
      console.log('...........................')

      //登录判断
      uni.navigateTo({
        // #ifdef H5
        url: '/pages/login/login',
        //#endif
        // #ifdef MP-WEIXIN 
        url: '/pages/wxlogin/wxlogin',
        //#endif
        // #ifdef APP-PLUS
        url: '/pages/login/login',
        //#endif

      });
      return Promise.reject(response)
    } else {
      console.log("---继续执行---")
      return Promise.resolve(response)
    }
  }
}

/*****************-拦截器-************************* */
router.beforeEach(({name}, from, next) => {
  if (sessionStorage.getItem('token')) {
    // 如果用户在login页面
    if (name === 'Login') {
      next();
    } else {
      next();
    }
  } else {
    // 不进行拦截
    if (name === 'Login' || name === 'weChat' || name === 'tipsDown') {
      next();
    } else {
      ElementUI.Message({
        message: '登录超时,请重新登录',
        type: 'error'
      })
      setTimeout(()=>{
        next({name: 'Login'});
      },1500)
    }
  }
});


// 拦截器请求
axios.interceptors.request.use(
  config => {
    if (sessionStorage.token) {
      // 判断是否存在token,如果存在的话,每个http header都加上Authorization
      config.headers.Authorization = `${sessionStorage.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  })
// 拦截器响应
axios.interceptors.response.use(function (response) {
  if (response.data.code == 401){
    window.location.href = "/";
    ElementUI.Message({
      message: '登录超时,请重新登录',
      type: 'error'
    })
  }
  return response
  }, function (error) {
    return Promise.reject(error)
  })

用在mian,js 直接复制

另一种小程序

var Fly=require("./wx") //wx.js为您下载的flyio源码文件
var fly = new Fly();
fly.config.timeout = 30000;
 /**
  *  定义各个API的 baseURL
  */
 const baseURL = {
   'BASE': 'https://diancaidian.sdjwkj.cn', // 基础主要业务
   'BAIDU': 'https://aip.baidubce.com/oauth/2.0/token', // 百度Api
  }; 
//配置请求基地址
//fly.config.baseURL='https://diancaidian.sdjwkj.cn';
 
//添加请求拦截器
fly.interceptors.request.use(request => {
  //给所有请求添加自定义header
  request.headers['content-type'] = 'application/json';
   const token = uni.getStorageSync('token');     //关于token的用法
	 console.log(JSON.stringify(token));
   if (token) {
		 request.headers['Authorization'] ='Bearer ' + token; 
   }
  //可以显式返回request, 也可以不返回,没有返回值时拦截器中默认返回request
  return request;
}); 

 fly.interceptors.response.use((response, promise) => {
 	// wx.hideNavigationBarLoading()
 	//uni.hideLoading();
 	// if (!(response && response.data && response.data.res === 0)) {
 	//   errorPrompt(response)
 	// }
 	return promise.resolve(response.data)
 }, (err, promise) => {
 	// wx.hideNavigationBarLoading()
 	//uni.hideLoading();
 
 //	errorPrompt(err)
 	return promise.reject(err)
 })
  
export default fly;

import fly from './utils/fly.js'; // 引入fly.js文件

// 线上
const HOST = 'https://diancaidian.sdjwkj.cn'
const env = '/prod-api'
export default {
	// 获取小程序的sessionkey
	getWxSessionKey: (params) => {
		return fly.post(HOST + env + '/api/xiaochengxun/login', params); //get方式调取http://***/device
	},

	sysconfGetConf: (params) => {
		return fly.post(HOST + env + '/api/sysconf/getConf', params, {
			headers: {
				"content-type": "application/json",
			}
		});

	},
}



			getDemo: async function() {
				if(uni.getStorageSync('token')){
					getApp().globalData.token = 'Bearer '+uni.getStorageSync('token')
					let res = await _self.$api.nongjuList({})
					if (res.code === 200) {
						console.log(res, 'shuju')
						_self.dataList = res.data
					
					} else {
						setTimeout(()=>{
							_self.getNongjuList()
						},1000)
					
					}
				}else {
						setTimeout(()=>{
							_self.getDemo()
						},1000)
					
					}
				

			},
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值