Browse Source

uniapp 解决小程序webscoket 无法连接的问题

master
xie.bx 3 years ago
parent
commit
d9cd29b4da
  1. 2
      im-ui/src/api/httpRequest.js
  2. 6
      im-uniapp/App.vue
  3. 76
      im-uniapp/common/request.js
  4. 2
      im-uniapp/main.js
  5. 2
      im-uniapp/manifest.json
  6. 9
      im-uniapp/package.json
  7. 2
      im-uniapp/pages.json
  8. 2
      im-uniapp/pages/login/login.vue
  9. 2
      im-uniapp/pages/mine/mine.vue

2
im-ui/src/api/httpRequest.js

@ -47,6 +47,8 @@ http.interceptors.response.use(async response => {
headers: { headers: {
refreshToken: refreshToken refreshToken: refreshToken
} }
}).catch(()=>{
router.replace("/login");
}) })
// 保存token // 保存token
sessionStorage.setItem("accessToken", data.accessToken); sessionStorage.setItem("accessToken", data.accessToken);

6
im-uniapp/App.vue

@ -16,7 +16,7 @@
this.initWebSocket(loginInfo); this.initWebSocket(loginInfo);
}).catch((e) => { }).catch((e) => {
console.log(e); console.log(e);
this.quit(); this.exit();
}) })
}, },
initWebSocket(loginInfo) { initWebSocket(loginInfo) {
@ -32,7 +32,7 @@
content: '您已在其他地方登陆,将被强制下线', content: '您已在其他地方登陆,将被强制下线',
showCancel: false, showCancel: false,
}) })
this.quit(); this.exit();
} else if (cmd == 3) { } else if (cmd == 3) {
// //
msgInfo.selfSend = userId == msgInfo.sendId; msgInfo.selfSend = userId == msgInfo.sendId;
@ -136,7 +136,7 @@
// //
!msg.selfSend && this.playAudioTip(); !msg.selfSend && this.playAudioTip();
}, },
quit() { exit() {
this.$wsApi.closeWebSocket(); this.$wsApi.closeWebSocket();
uni.removeStorageSync("loginInfo"); uni.removeStorageSync("loginInfo");
uni.navigateTo({ uni.navigateTo({

76
im-uniapp/common/request.js

@ -1,4 +1,7 @@
// 请求队列
let requestList = [];
// 是否正在刷新中
let isRefreshToken = false;
const request = (options) => { const request = (options) => {
const header = options.header || {}; const header = options.header || {};
@ -16,41 +19,41 @@ const request = (options) => {
if (res.data.code == 200) { if (res.data.code == 200) {
return resolve(res.data.data) return resolve(res.data.data)
} else if (res.data.code == 400) { } else if (res.data.code == 400) {
uni.navigateTo({ navToLogin();
url: '/pages/login/login'
});
} else if (res.data.code == 401) { } else if (res.data.code == 401) {
console.log("token失效,尝试重新获取") console.log("token失效,尝试重新获取")
if (!loginInfo) { if (isRefreshToken) {
uni.navigateTo({ // 正在刷新token,把其他请求存起来
url: '/pages/login/login' return new Promise(resolve => {
}); requestList.push(() => {
resolve(request(options))
})
})
} }
isRefreshToken = true;
// 发送请求, 进行刷新token操作, 获取新的token // 发送请求, 进行刷新token操作, 获取新的token
const data = await request({ const res = await reqRefreshToken(loginInfo).catch((res) => {
method: 'PUT', return navToLogin();
url: '/refreshToken', }).finally(()=>{
header: { requestList.forEach(cb => cb());
refreshToken: loginInfo.refreshToken requestList = [];
} isRefreshToken = false;
}) })
// 换取token失败,跳转至登录界面 if (res.data.code != 200) {
if(data.code != 200){ return navToLogin();
uni.navigateTo({
url: '/pages/login/login'
});
} }
// 保存token // 保存token
uni.setStorageSync("loginInfo", data); uni.setStorageSync("loginInfo", res.data.data);
// 重新发送刚才的请求 // 重新发送刚才的请求
return request(options) return request(options)
} else { } else {
uni.showToast({ uni.showToast({
icon: "none", icon: "none",
title: res.data.message, title: res.data.message,
duration: 1500 duration: 1500
}) })
return reject(res.data.data) return reject(res.data)
} }
}, },
fail(error) { fail(error) {
@ -64,4 +67,35 @@ const request = (options) => {
}); });
} }
const reqRefreshToken = (loginInfo) => {
return new Promise(function(resolve, reject) {
uni.request({
method: 'PUT',
url: process.env.BASE_URL + '/refreshToken',
header: {
refreshToken: loginInfo.refreshToken
},
success: (res) => {
resolve(res);
},
fail: (res) => {
reject(res);
}
});
});
}
const navToLogin = () => {
uni.showToast({
icon: "none",
title: "登录过期,请需要重新登录",
duration: 1500
})
uni.removeStorageSync("loginInfo");
uni.navigateTo({
url: '/pages/login/login'
});
}
export default request; export default request;

2
im-uniapp/main.js

@ -14,6 +14,8 @@ export function createApp() {
app.config.globalProperties.$wsApi = socketApi; app.config.globalProperties.$wsApi = socketApi;
app.config.globalProperties.$emo = emotion; app.config.globalProperties.$emo = emotion;
app.config.globalProperties.$enums = enums; app.config.globalProperties.$enums = enums;
app.config.globalProperties.$init = (data)=>{getApp().init(data)};
app.config.globalProperties.$exit = (data)=>{getApp().exit()};
return { return {
app app
} }

2
im-uniapp/manifest.json

@ -50,7 +50,7 @@
"quickapp" : {}, "quickapp" : {},
/* */ /* */
"mp-weixin" : { "mp-weixin" : {
"appid" : "wx37f146131db06a98", "appid" : "wxda94f40bfad0262c",
"setting" : { "setting" : {
"urlCheck" : false "urlCheck" : false
}, },

9
im-uniapp/package.json

@ -6,16 +6,16 @@
"browser":"chrome", "browser":"chrome",
"env": { "env": {
"UNI_PLATFORM": "h5", "UNI_PLATFORM": "h5",
"BASE_URL": "http://127.0.0.1:8888", "BASE_URL": "http://192.168.1.5:8888",
"WS_URL": "ws://127.0.0.1:8878/im" "WS_URL": "ws://192.168.1.5:8878/im"
} }
}, },
"dev-wx-mini": { "dev-wx-mini": {
"title": "开发环境-微信小程序", "title": "开发环境-微信小程序",
"env": { "env": {
"UNI_PLATFORM": "mp-weixin", "UNI_PLATFORM": "mp-weixin",
"BASE_URL": "http://127.0.0.1:8888", "BASE_URL": "http://192.168.1.5:8888",
"WS_URL": "ws://127.0.0.1:8878/im" "WS_URL": "ws://192.168.1.5:8878/im"
} }
}, },
"prod-h5": { "prod-h5": {
@ -31,6 +31,7 @@
"title": "正式环境-微信小程序", "title": "正式环境-微信小程序",
"env": { "env": {
"UNI_PLATFORM": "mp-weixin", "UNI_PLATFORM": "mp-weixin",
"BASE_URL": "https://www.boxim.online/api",
"WS_URL": "wss://www.boxim.online:81/im" "WS_URL": "wss://www.boxim.online:81/im"
} }
} }

2
im-uniapp/pages.json

@ -46,7 +46,7 @@
"path": "pages/group/group-member" "path": "pages/group/group-member"
}, { }, {
"path": "pages/mine/mine-edit" "path": "pages/mine/mine-edit"
}{ },{
"path": "pages/mine/mine-password" "path": "pages/mine/mine-password"
}], }],
"globalStyle": { "globalStyle": {

2
im-uniapp/pages/login/login.vue

@ -49,7 +49,7 @@
console.log("登录成功,自动跳转到聊天页面...") console.log("登录成功,自动跳转到聊天页面...")
uni.setStorageSync("loginInfo", data); uni.setStorageSync("loginInfo", data);
// App.vue // App.vue
getApp().init(data); this.$init(data);
// //
uni.switchTab({ uni.switchTab({
url: "/pages/chat/chat" url: "/pages/chat/chat"

2
im-uniapp/pages/mine/mine.vue

@ -52,7 +52,7 @@
title: '确认退出?', title: '确认退出?',
success: (res) => { success: (res) => {
if (res.confirm) { if (res.confirm) {
getApp().quit(); this.$exit();
} }
} }
}); });

Loading…
Cancel
Save