http和全局token,config的封装

http和token和封装放在同一个文件夹就好,这个是在H5项目中封装的,这个是http页面的封装

const config = require('../config.js');
const app = getApp();  //全局调用的一个方法
import Base64 from "./Base64.js";

const { getAccessToken ,getUserInfo} = require('./token.js');


// 请求封装
const http = (url, data, Method = "POST") => {
	var promise = new Promise((resolve, reject) => {
		uni.showLoading({
			title:"加载中..."
		})
		var that = this;
		var postData = data;
		console.log();
		uni.request({
			url: config.commonUrl + url,
			data: postData,
			method: Method,
			header: {
				'content-type':'application/x-www-form-urlencoded;charset=UTF-8',
				'sys-token'	: uni.getStorageSync('sys-token') ||'',	
				'user-token': uni.getStorageSync('user-token') || '',
				"uid": uni.getStorageSync('uid') ||"",
				"platform": "mobile"
			},
			success: function(res) {
				
				if (res.statusCode != 200) {
					reject({
						error: '服务器忙,请稍后重试',
						code: 500
					});
					return;
				}
				if (res.data.status == -901 || res.data.status == -903 || res.data.status == -904 || res.data.status == -905 || res.data
					.status == -906 || res.data.status == -901 || res.data.status == -101 || res.data.status == -102 || res.data.status == -103 
					|| res.data.status == -104) {
						uni.setStorageSync("user-token","");
						uni.setStorageSync('sys-token',"");
						getAccessToken(uni.getStorageSync('uid')); //调用token文件,实现后台刷新赋值
						let time = setInterval(() => {
							if (uni.getStorageSync('user-token')) {
								clearInterval(time)
								let href = window.location.href
								href = href.substring(href.indexOf("/pages"))
								uni.reLaunch({
									url: href,
								})
							}else if(uni.getStorageSync('sys-token')){	
								clearInterval(time);
								let href = window.location.href;
								href = href.substring(href.indexOf("/pages"));
								uni.reLaunch({
									url:href,
								})
							}
						}, 1000)
						return;
					// }
				}
				resolve(res.data);
				uni.hideLoading();
			},
			error: function(e) {
				reject("网络出错");
				uni.showToast({
				    title: "网络出错",
				    duration: 2000,
					icon:"none"
				});
			}
		});
	});
	return promise;
}
module.exports = http;

全局token的封装

// 获取accessToken
const config = require('../config.js')
const md5 = require('./md5.js')
import Base64 from "./Base64.js"
const app = getApp()
function getAccessToken(uid) {
	uni.showLoading({
		title: "加载中..."
	})
	return new Promise(function(resolve, reject) {
		let _timestamp = new Date().getTime().toString().substr(0, 10);
		uni.setStorageSync('uid',uid)
		let str = `app_id=${config.serverId}&app_secret=${config.serverSecret}&timestamp=${_timestamp}&user_id=${uid}`
		let _signature = md5.hex_md5(str)
		const param = {
			timestamp: _timestamp,
			app_id: config.serverId,
			user_id: uid,
			signature: _signature,
		};
		uni.request({
			url: `${config.commonUrl}/buildtoken/getAccessToken`,
			method: 'POST',
			data: param,
			header: {
				'content-type': 'application/x-www-form-urlencoded', // 默认值
			},
			success: (res) => {
				uni.setStorageSync('user-token', res.data.data.user_token)
				let user_token = res.data.data.user_token;
				getUserInfo(user_token)
			},
			fail: function(res) {
				reject(res)
			}
		})
	})
}
//console.log();
function getUserInfo(token) {
	uni.request({
		url: `${config.commonUrl}后台的登入接口`,
		method: 'POST',
		data: {},
		header: {
			'content-type': 'application/x-www-form-urlencoded', // 默认值
			'user-token': token || '',
			'sys_token' :uni.getStorageSync('sys_token'),
			'uid':  uni.getStorageSync('uid') || '',
			"platform": 'mobile'
		},
		success: (res) => {
			// console.log(res.data.data)
			getApp().globalData.info = res.data.data
			if(res.data.data !== undefined) {
				uni.setStorageSync('nickname', res.data.data.nickname)
				uni.setStorageSync('headimg', res.data.data.headimg)
			}
			uni.hideLoading();
		},
		fail: function(res) {
			reject(res)
		}
	})
}
module.exports = {getAccessToken,getUserInfo}

config反向代理,解决前端的跨域问题




//设置是否为生产环境,true为生产环境
var is_product_env = false;

var commonUrl = is_product_env ? "上线后的地址" : "/api";  //设置开发和生产环境调用接口


var baseImageUrl = '上线后的地址' //正式图片地址

var serverId = '' // 服务器应用id
var serverSecret = '' //服务器的一个身份验证

var config = {
  // 下面的地址配合云端 Demo 工作
	is_product_env,
    serverId,
    serverSecret,
    commonUrl,
    baseImageUrl,
}

module.exports = config

H5的需要在manifest.json --> 源码视图中配置一下,使用history打包上线虽然地址后面不会有#,但是会有一个问题就是刷新页面就会404,这个是需要后台那里配置一下就好了的

"h5" : {
        "title" : "" //名字,
        "devServer" : {
            "port" : "",
            "historyApiFallback" : true,
            "disableHostCheck" : true,
            "proxy" : {
                "/api" : {
                    "target" : "上线后的地址",
                    "changeOrigin" : true,
                    "secure" : false,
                    "pathRewrite" : {
                        "^/api" : ""
                    }
                }
            },
            "https" : true
        },
        "router" : {
            "mode" : "history", //使用history打包可以把地址后面的#去掉
            "base" : ""
        },
        // "publicPath" : "",
        "sdkConfigs" : {
            "maps" : {}
        },
        "domain" : "m.qisedu.cn",
        "uniStatistics" : {
            "enable" : false
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值