init
This commit is contained in:
119
common/http.interceptor.js
Normal file
119
common/http.interceptor.js
Normal file
@@ -0,0 +1,119 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
|
||||
*/
|
||||
// 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作
|
||||
const install = (Vue, vm) => {
|
||||
// 通用请求头设定
|
||||
const ajaxHeader = 'x-ajax';
|
||||
const sessionIdHeader = 'Authorization';
|
||||
const rememberMeHeader = 'x-remember';
|
||||
|
||||
// 请求参数默认配置
|
||||
Vue.prototype.$u.http.setConfig({
|
||||
baseUrl: vm.vuex_config.baseUrl,
|
||||
originalData: true,
|
||||
// 默认头部,http2约定header名称统一小写 aidex
|
||||
header: {
|
||||
'content-type': 'application/json',
|
||||
'x-requested-with': 'XMLHttpRequest'
|
||||
}
|
||||
});
|
||||
|
||||
// 请求拦截,配置Token等参数
|
||||
Vue.prototype.$u.http.interceptor.request = (req) => {
|
||||
if (!req.header){
|
||||
req.header = [];
|
||||
}
|
||||
req.header["source"] = "uniapp";
|
||||
req.header["clientId"] = "dab457a1ea14411787c240db05bb0832"
|
||||
// 默认指定返回 JSON 数据
|
||||
if (!req.header[ajaxHeader]){
|
||||
req.header[ajaxHeader] = 'json';
|
||||
}
|
||||
// 设定传递 Token 认证参数 aidex
|
||||
if (req.url!="/auth/login"&&!req.header[sessionIdHeader] && vm.vuex_token){
|
||||
req.header[sessionIdHeader] = "Bearer "+vm.vuex_token;
|
||||
}
|
||||
|
||||
// 为节省流量,记住我数据不是每次都发送的,当会话失效后,尝试重试登录 aidex
|
||||
if (!req.header[rememberMeHeader] && vm.vuex_remember && req.remember){
|
||||
req.header[rememberMeHeader] = vm.vuex_remember;
|
||||
req.remember = false;
|
||||
}
|
||||
console.log('request', req);
|
||||
return req;
|
||||
}
|
||||
|
||||
// 响应拦截,判断状态码是否通过
|
||||
Vue.prototype.$u.http.interceptor.response = async (res, req) => {
|
||||
console.log('response', res);
|
||||
let data = res.data;
|
||||
if (!(data)){
|
||||
vm.$u.toast('未连接到服务器')
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof data === 'object' && !(data instanceof Array)){
|
||||
if (data.token){
|
||||
vm.$u.vuex('vuex_token', data.token);
|
||||
if (data.user){
|
||||
vm.$u.vuex('vuex_user', data.user);
|
||||
}
|
||||
vm.$u.vuex('vuex_isAgent', data.isAgent);
|
||||
}
|
||||
if (data.result === 'login'){
|
||||
vm.$u.vuex('vuex_user', {});
|
||||
if (req.tryagain == undefined || req.tryagain){
|
||||
req.tryagain = false; req.remember = true;
|
||||
await vm.$u.http.request(req).then(res => {
|
||||
data = res;
|
||||
});
|
||||
}
|
||||
if (data.result === 'login'){
|
||||
if (!req.data.loginCheck){
|
||||
vm.$u.toast(data.msg);
|
||||
}
|
||||
req.tryagain = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (res.header && res.header[rememberMeHeader]){
|
||||
let remember = res.header[rememberMeHeader];
|
||||
if (remember && remember != 'deleteMe'){
|
||||
vm.$u.vuex('vuex_remember', remember);
|
||||
}else{
|
||||
vm.$u.vuex('vuex_remember', '');
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
// 封装 get text 请求
|
||||
vm.$u.getText = (url, data = {}, header = {}) => {
|
||||
return vm.$u.http.request({
|
||||
dataType: 'text',
|
||||
method: 'GET',
|
||||
url,
|
||||
header,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 封装 post json 请求
|
||||
vm.$u.postJson = (url, data = {}, header = {}) => {
|
||||
header['content-type'] = 'application/json';
|
||||
return vm.$u.http.request({
|
||||
url,
|
||||
method: 'POST',
|
||||
header,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default {
|
||||
install
|
||||
}
|
Reference in New Issue
Block a user