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}×tamp=${_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
}
}