uniapp写的项目,在hbuilderx中云打包成apk后我在登录存储的token死都获取不到,导致后续接口请求头没有token连接不到接口,只有运行到手机或者模拟器还有打包成apk后是获取不到,其他的小程序还有网页都可以获取到
试过了很多种方法,uni.getStorageSync、uni.setStorage和uni.getStorage进行存储、vuex还有全局变量...没一个成功的。但是在同一个页面进行存储和取值是可以实现。所以猜想是写法的问题。完整问题如下:uniapp打包成apk后uni.setStorageSync只能存储当前页面,页面切换时获取不到存储的值_前端-CSDN问答
1.在request.js请求接口页面添加本地存储设置
在这里我把存值和取值都在一个封装的请求方法里面,在get请求的请求头上使用tui.getToken()方法把获取的token传入,post请求也可以设置
/*** 常用方法封装 请求,文件上传等* @author echo. **/
import qs from 'qs';
const tui= {// 设置setToken: function(token) {uni.setStorageSync("token_breed", token)},// 获取getToken() {return uni.getStorageSync("token_breed")},// 接口公共地址commoneUrl: function() {return 'http://xxx基本接口地址' // 生产},post: function(url, data, type) {var promise = new Promise((resolve, reject) => {var postData = data;uni.request({url: tui.commoneUrl() + url,data: qs.stringify(postData),method: 'POST',header: {'content-type': type || 'application/x-www-form-urlencoded'},success: function(res) {resolve(res.data);uni.hideLoading();if (res.data.code == 0) {uni.reLaunch({url: '/pages/login/login'})}// code ===0 失效问题},error: function(e) {reject('网络出错');}})});return promise;},get: function(url, data) {var promise = new Promise((resolve, reject) => {var postData = data;uni.request({url: tui.commoneUrl() + url,data: postData,method: "GET",dataType: 'json',header: {'content-type': 'application/x-www-form-urlencoded','token': tui.getToken() || ''},success: function(res) {resolve(res.data);// if (res.data.code == 0) {// uni.reLaunch({// url: '/pages/tabBar/tabBar'// })// }},error: function(e) {reject('网络出错');}});});return promise;},
}export default tui
2.main.js中导入request.js文件
并且在vue的原型链上添加全局$tui
import tui from './utils/request.js'
Vue.prototype.$tui = tui
3.登录存储
登录使用get请求并且拼接路径和传参,之后使用this.$tui.setToken(res.token)方法,把token传入
login(){
this.$tui.get('/login',{name:'admin'}).then(res => {if (res.code == 200) {this.$tui.setToken(res.token)uni.reLaunch({url: '/pages/equip/index' // 跳转 - 首页})}else{uni.showToast({title: res.msg,duration: 2000,icon:'error'});}})
}
4.页面发送请求
不需要再次传入token了
queryEquip() {this.$tui.get("/deviceInfo").then(result=>{})},
5.效果
在手机基座上请求到了数据了