初步封装
//http类// 每次请求接口时都会根据code判断当前的问题(判断登录状态),例如:code=4xx时,可能是token过期或用户点击了取消// 当token没有过期,并存在时才会进行后面的操作。token可以通过调用登录接口获取class Http { // 静态变量,可以通过Http.request的方式使用 static request(params) { // 给传入变量设置默认值,定义数据 const method = params.method || 'GET', data = params.data || {}, apiBaseUrl = params.apiBaseUrl || {}, hideLoading = params.hideLoading || false, token = uni.getStorageSync('token') || '', employeeId = uni.getStorageSync('employeeId') || '1', companyId = uni.getStorageSync('companyId') || '1'; // 如果当前请求接口时,屏幕出现提示: 加载中... if (!hideLoading) { uni.showLoading({ title: '加载中...' }); } // 返回一个promise对象(接口的请求,为了不影响页面的显示等,使用promise) return new Promise((resolve, reject) => { // 调用源生的request,请求数据 uni.request({ url: `${apiBaseUrl}${params.url}`, method, // 请求头设置 header: { 'content-type': 'application/json', 'Token': token,//携带的token 'employeeId': employeeId,//员工id 'companyId': companyId }, data, // 成功时返回信息,res中就是保存信息的对象 success: res => { //动态判断是否跳出当前函数,相当于return,但不会直接导致这之后的代码不运行 typeof params.success == "function" && params.success(res.data); if (res.data.code == 200) { // 成功时返回数据 resolve(res.data.data) } else if (res.data.code == 500) { // 服务器出错时返回数据 let message = '' // 将服务器错误时的信息,显示到页面上 if (res.data.message) { message = res.data.message } else if (res.data.data.message) { message = res.data.data.message } uni.showModal({ content: "" + message, showCancel: false }); // 请求出错 } else if (res.data.code == 401 || res.data.code == 403) { // 提示出错的原因 uni.showModal({ content: '您尚未登录或者登录已过期,请点击确定返回登录', // 这里是根据用户的点击,例如showModual的这两个属性"cancelText":"取消","confirmText":"登录", // 通过用户的点击,res会返回不同的数据,用来判断如何进行下一步操作 success: function(res) { // 点击登录用户将跳转到登录也买你 if (res.confirm) { //token登录过期删除token uni.removeStorageSync('token'); // 返回登录页面 uni.navigateTo({ url: '/pages/login/login' }) } else if (res.cancel) { console.log('用户点击取消'); } } }); reject(false) } }, // 请求失败时 fail: (err) => { // 提示网络连接错误 uni.showModal({ content: "网络连接错误" }); typeof params.fail == "function" && params.fail(e.data); // 返回错误信息 reject(err); }, // 无论请求成功还是失败都会执行complete中的信息 complete: () => { // 隐藏加载中的提示信息 if (!hideLoading) { uni.hideLoading(); } // 跳出函数,相当于return false typeof params.complete == "function" && params.complete(); return; } }) }) }}export { Http}
再给不同接口进行封装
import { Http} from '../utils/http.js';import config from '../config/config.js';// 公司热门产品列表export function fetchProductCompanyHot(id) { return Http.request({ apiBaseUrl: config.apiBusinessUrl, url: `/business/product/company/hot/${id}`, method: 'POST' })}// 查询产品详情export function fetchProductDetail(id) { return Http.request({ apiBaseUrl: config.apiProductUrl, url: `/product/frontProduct/detail/${id}`, method: 'POST' })}// 查询ta的推荐产品列表export function fetchTaRecommend(data) { return Http.request({ apiBaseUrl: config.apiBusinessUrl, url: '/business/product/taRecommend/list', method: 'POST', data })}// 根据规格查询产品价格export function fetchPriceByStandar(data) { return Http.request({ apiBaseUrl: config.apiProductUrl, url: '/product/frontProduct/price', method: 'POST', hideLoading: true, data })}// 新增留言export function createMessage(data) { return Http.request({ apiBaseUrl: config.apiBusinessUrl, url: '/business/message/addMessage', method: 'POST', data })}// 根据员工id获取产品列表export function fetchUserProduct() { return Http.request({ apiBaseUrl: config.apiBusinessUrl, url: `/business/product/userProduct/list/`, method: 'POST' })}// 生成邀请二维码export function qrCode() { return Http.request({ apiBaseUrl: config.apiBusinessUrl, url: '/app/qrCode', method: 'POST' })}