|
|
|
|
# 微信小程序开发
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
navigateTo的两种用法:
|
|
|
|
|
|
|
|
|
|
1. 通过url传递参数到其他界面
|
|
|
|
|
2. 通NavigateTo的EventChannel回调函数来传递参数到其他界面。(推荐)
|
|
|
|
|
|
|
|
|
|
第一种就不用解释了。网上有。
|
|
|
|
|
|
|
|
|
|
解释第二种的用法:
|
|
|
|
|
|
|
|
|
|
首先:定义一个NavigateTO。
|
|
|
|
|
|
|
|
|
|
在Success中直接用:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
res.eventChannel.emit('toHome',{ data: 'my from index page' })
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这样就可以将ToHome的值或内容存到EventChange中。
|
|
|
|
|
|
|
|
|
|
第二:在其他界面中,我们使用下面的代码:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
const eventChannel = this.getOpenerEventChannel();
|
|
|
|
|
// 监听 index页面定义的toHome 事件
|
|
|
|
|
eventChannel.on('toHome', (res) => {
|
|
|
|
|
console.log(res.data) // my from index page
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
通过上面的代码我们可以获取到其他界面存到EventChange中的内容。
|
|
|
|
|
|
|
|
|
|
进而实现界面的值传递。
|
|
|
|
|
|
|
|
|
|
## 登录流程
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
1. 判断token是否存在
|
|
|
|
|
2. 判断本地缓存是否有用户信息
|
|
|
|
|
3. 判断后端数据库是否有用户存在
|
|
|
|
|
4. 判断Openid、Sessionkey等相关信息
|
|
|
|
|
|
|
|
|
|
#### 判断token是否存在
|
|
|
|
|
|
|
|
|
|
1. 将Code 发送到后端。获取Openid、Sessionkey。
|
|
|
|
|
2. 后端判断是否含有token。没有则进行登录
|
|
|
|
|
3. 如果用户是未绑定微信的进行判断绑定
|
|
|
|
|
|
|
|
|
|
#### 判断本地缓存是否存有用户信息
|
|
|
|
|
|
|
|
|
|
没有则进行请求获取。并缓存一定的用户信息再进行登录
|
|
|
|
|
|
|
|
|
|
#### 判断后端数据库是否有用户存在。
|
|
|
|
|
|
|
|
|
|
有则进行登录,无则进行注册或绑定。
|
|
|
|
|
|
|
|
|
|
#### 判断Openid、SessionKey等平台信息
|
|
|
|
|
|
|
|
|
|
是否过期然后继续及时更新, 并提交到后端进行缓存。
|
|
|
|
|
|
|
|
|
|
## 拦截器
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
背景:
|
|
|
|
|
|
|
|
|
|
当用户登录成功后,想进行数据获取,但后端要求前端要携带token和uid.可不知道前端也不知道自己是否有携带。
|
|
|
|
|
|
|
|
|
|
所以就产生要对自己进行发送时的请求进行拦截,随即检查通过后再发送。出去。
|
|
|
|
|
|
|
|
|
|
```JavaScript
|
|
|
|
|
var token = wx.getStorgetaync('token') /// 获取本地的token值
|
|
|
|
|
|
|
|
|
|
var exportUrls = []
|
|
|
|
|
/// 上面的部分是用来提取信息的
|
|
|
|
|
function CreateHader(url,type){
|
|
|
|
|
let header={},
|
|
|
|
|
if(type == 'POST_PARAMS'){
|
|
|
|
|
header = {
|
|
|
|
|
"content-type":"application/x-www-form-urlencoded"
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
header = {
|
|
|
|
|
"content-type":"application/json"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(exportUrls.indexOf(url) == -1){
|
|
|
|
|
let token = token.match(/authorization=([^;]*)/)[1] /// 提取其中的token值
|
|
|
|
|
header['authorization'] = token
|
|
|
|
|
}
|
|
|
|
|
return header
|
|
|
|
|
}
|
|
|
|
|
/// 这里是对头部的格式和内容进行规范化。
|
|
|
|
|
|
|
|
|
|
function requestInterceptor(config){
|
|
|
|
|
return new Promise(resolve,reject){
|
|
|
|
|
if(!config.header.authorization){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|