当前请求比较常规的方法
const config = Symbol('config')
let ajax={
// 默认配置
config :{
baseURL: '',
header: {
'Content-Type':'application/json;charset=UTF-8',
'Content-Type':'application/x-www-form-urlencoded'
},
method: 'GET',
dataType: 'json',/* 如设为json,会对返回的数据做一次 JSON.parse */
responseType: 'text',
},
//路由 不拦截登录的页面
filterPages: ['pages/index/index','pages/login/login', 'pages/sign/sign', 'pages/login/forgetPass'],
//设置拦截器
interceptors :{
request:null,
response:null
},
//请求
request(options){
let _this=this;
options.baseURL = options.baseURL || _this.config.baseURL;
options.dataType = options.dataType || _this.config.dataType;
options.data = options.data || {};
options.url = options.baseURL + options.url;
options.method = options.method || _this.config.method;
return new Promise((resolve, reject) => {
options.success=(res)=>{
let statusCode = res.statusCode;
//如果响应的状态时200,表示成功了
if (statusCode === 200) {
//但是 如果我当前的请求数据为空,说明token过期了或者其他
if(res.data.code==-1){
//那么就获取当前的路由
let pages = getCurrentPages()
let currentRouter=null;
//#ifdef H5
currentRouter = pages[0].$page.path
//#endif
//#ifdef APP-PLUS
currentRouter = pages[pages.length - 1].route
//#endif
//看我当前是不是在我拦截的路由上进行的请求,如果是那就没啥,如果不是的话,那么请求失败了就要默认跳转至登录页
if(_this.config.filterPages.indexOf(currentRouter) == -1){
uni.redirectTo({
url: '/pages/login/login',
});
}
}
//并且把请求的内容返回去
resolve(res.data);
}else if(statusCode === 401){
uni.reLaunch({
url: '/pages/login/login'
});
}
},
options.fail=(err)=>{
reject(res.err)
}
/*
uni.request({
url: 'https://www.example.com/request', ---->options.url
data: {},----------------------------------->options.data
header: {},--------------------------------->暂时没用
success: (res) => {}------------------------>options.success
});
*/
//把此对象传入uni的ajax请求方法中去,然后resolve(res.data);就是请求来的结果
uni.request(options)
})
},
get(url, data={}, options = {}) {
options.url = url
options.data = data;
//判断是否有token;
options.data.token = data.token || uni.getStorageSync('token')
options.method = 'GET'
return ajax.request(options)
},
post(url, data={}, options = {}) {
options.url = url
options.data = data
options.data.token = data.token || uni.getStorageSync('token')
options.data.lang = data.lang || uni.getStorageSync('locale')
options.method = 'POST'
return ajax.request(options)
}
}
export default ajax
main.js
import http from './base/http.js'
Vue.prototype.$get = http.get;
Vue.prototype.$post = http.post;
使用
getMymoney(){
this.$post('api/quotes/assets').then((res)=>{
console.log(res)
})
},








网友评论