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.效果
在手机基座上请求到了数据了