新建request.js,其中common存放url等公共资源,userinfo存储token和用户信息等
import uniRequest from 'uni-request';
import common from "../utils/common.js";
import userinfo from './userinfo.js';
uniRequest.defaults.baseURL = common.baseUrl();
uniRequest.defaults.headers.common['Authorization'] = 'Bearer ' + uni.getStorageSync('token');
// uniRequest.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
uniRequest.defaults.headers.post['Content-Type'] = 'application/json';
// uniRequest方法别名
// uniRequest.request(config)
// uniRequest.get(url[, config])
// uniRequest.delete(url[, config])
// uniRequest.head(url[, config])
// uniRequest.options(url[, config])
// uniRequest.post(url[, data[, config]])
// uniRequest.put(url[, data[, config]])
// uniRequest.patch(url[, data[, config]])
// 请求拦截
uniRequest.interceptors.request.use(
request => {
// 可配置基本信息
request.headers.common.Authorization = 'Bearer ' + uni.getStorageSync('token')
return request;
},
err => {
console.log('请求拦截err:' + err);
return Promise.reject(err);
});
// 响应拦截
uniRequest.interceptors.response.use(function(response) {
if (response.status == 401) {
// 清空userinfo和token信息,重新请求获取token
uni.navigateTo({
url: "/pages/login/login"
})
}
return Promise.resolve(response);
}, function(err) {
console.log('响应拦截err')
if (err && err.response) {
// 自定义,暂未更改
switch (err.response.status) {
case 301:
err.message = '请求的数据具有新的位置且更改是永久的';
break
case 302:
err.message = '请求的数据临时具有不同 URI';
break
case 304:
err.message = '未按预期修改文档';
break
case 305:
err.message = '必须通过代理来访问请求的资源';
break
case 400:
err.message = '请求中有语法问题,或不能满足请求';
break
case 402:
err.message = '所使用的模块需要付费使用';
break
case 403:
err.message = '当前操作没有权限';
break
case 404:
err.message = '服务器找不到给定的资源';
break
case 407:
err.message = '客户机首先必须使用代理认证自身';
break
case 415:
err.message = '请求类型不支持,服务器拒绝服务';
break
case 417:
err.message = '未绑定登录账号,请使用密码登录后绑定';
break
case 426:
err.message = '用户名不存在或密码错误';
break
case 429:
err.message = '请求过于频繁';
break
case 500:
err.message = '服务器内部错误,无法完成请求';
break
case 501:
err.message = '服务不支持请求';
break
case 502:
err.message = '网络错误,服务器接收到上上游服务器无效响应';
break
case 503:
err.message = '服务器无法处理请求';
break
case 504:
err.message = '网络请求超时';
break
case 999:
err.message = '系统未知错误,请反馈给管理员';
break
}
} else {
err.message = '连接服务器失败!'
}
console.log(err.message)
return Promise.reject(err);
});
export function myRequest(options) {
let headers = {}
var Token = uni.getStorageSync('token');
var UserId = uni.getStorageSync('UserId');
headers["Content-Type"] = "application/json";
return new Promise((res, rej) => {
uni.request({
url: baseURL + options.url,
method: options.method || 'GET',
data: options.data,
header: headers,
success(data) {
res(data)
},
fail() {
rej()
}
})
})
}
export default {
uniRequest: uniRequest
}
在main.js全局挂载
import request from './utils/request.js'
Vue.prototype.$request = request
使用:
async getUserInfo() {
const result = await this.$request.uniRequest.get('user/...')
if (result.status == 200) {
...
}
},
const result = await this.$request.uniRequest.post('document', {
title: '',
content: '',
type: 0
});
const result = await this.$request.uniRequest.put("/user/" + user_id)
const result = await this.$request.uniRequest.delete("/user/" + user_id)