/* * 该文件作用于ajax 请求,该文件用户不会直接调用,提供给/server/api.js 文件使用 * 封装了ajax请求的公共头,等其它信息 * 请求前处理和请求后处理的方法 */ // 从环境配置当中获取接口的BaseUrl import api from '@/config/api' // const $host = 'https://portal.rockstect.com' let $host = '' if (api.env === 'prod') { $host = 'https://portal.rockstect.com' } else { $host = 'http://112.124.25.186:18998' } const request = async function (config) { const Device = uni.getStorageSync('m-device-info') console.log("Device", JSON.stringify(Device)); // 这里确保一定是可以获取得到的 let token = uni.getStorageSync('m-token') let header = {} header.device = encodeURIComponent(Device) if (config.data && config.data.token) token = config.data.token // 如果有token,说明登录成功了,那么就在请求头里面添加token信息 if (token) header.Authorization = token let { url, data, method, showLoading } = config if (!showLoading) { uni.showLoading({ mask: true, title: '加载中...', }) } url = $host + '/' + url return new Promise((resolve, reject) => { uni.request({ url, data, header, method, timeout: 3000, success(res) { // 这里统一处理数据 if (res.statusCode === 200) { if (res.data.success) { resolve(res.data) } else { reject({ msg: res.data.message, data: res.data, }) } } else { reject({ msg: `网络错误:${res.statusCode}`, data: res.data, }) } }, fail(err) { // 这里统一处理数据报错的问题,这里的错误交给Promise函数的catch方法执行了 console.log( err, '网络请求报错的原因,这里的错误status状态码肯定不是200' ) reject({ msg: `服务器繁忙,请稍候重试~`, data: err, }) }, complete() { uni.hideLoading() }, }) }) .then((res) => { uni.hideLoading() return res }) .catch((err) => { uni.hideLoading() const { msg, data } = err uni.showToast({ icon: 'none', title: msg ? msg : '服务器开小差了', }) // 请求报错,跳转到错误页面 return err }) .finally(() => { uni.hideLoading() // 不管请求成功还是失败,都展示页面 }) } export default { // get方法封装 get: function (url, data, flag) { return request({ url, data: data ? data : {}, method: 'GET', showLoading: flag ? flag : false, }) }, // post方法封装 post: function (url, data, flag, abort) { return request({ url, data: data ? data : {}, method: 'POST', showLoading: flag ? flag : false, }) }, }