api响应拦截器
  1. import { getStorage, removeStorage } from "@/utils/storage.js"
  2. let apiUrl = 'https://lsm.liandu.gov.cn:2020';
  3. const responeCode = ["AUTH.RESOURCE.E0001", "AUTH.RESOURCE.E0002"];
  4. const baseRequest = (url, params, xmodule = '/lsm-service', method = 'POST') => {
  5. return new Promise((resolve, reject) => {
  6. uni.request({
  7. url: apiUrl + xmodule + url, //测试接口
  8. method,
  9. data: params,
  10. header: {
  11. access_token: getStorage() || ''
  12. },
  13. }).then((response) => {
  14. let [error, res] = response;
  15. let result = res.data
  16. if (result.success === false) {
  17. if (responeCode.includes(result.errorCode)) {
  18. uni.showToast({
  19. title: `登录信息过期,请重新登录!`,
  20. icon: 'none',
  21. duration: 2000
  22. });
  23. setTimeout(() => {
  24. removeStorage()
  25. uni.reLaunch({
  26. url: '/pages/login/index'
  27. })
  28. }, 1500);
  29. } else if (result.errorCode === "validator") {
  30. let messageData = "";
  31. if (result.attachments.errors && result.attachments.errors.length) {
  32. result.attachments.errors.forEach(s => (messageData = messageData.concat(`${s.message}`)));
  33. uni.showToast({
  34. title: messageData,
  35. icon: 'none',
  36. duration: 2000
  37. });
  38. }
  39. } else {
  40. uni.showToast({
  41. title: result.exceptionContent || "连接失败,请重试!",
  42. icon: 'none',
  43. duration: 2000
  44. });
  45. }
  46. }
  47. resolve(result);
  48. }).catch(error => {
  49. uni.showToast({
  50. icon: 'none',
  51. title: '服务器错误!',
  52. duration: 2000
  53. })
  54. let [err, res] = error;
  55. reject(err);
  56. });
  57. })
  58. };
  59. export default {
  60. baseRequest
  61. }

main.js 原型挂载
  1. import api from './api'
  2. Vue.prototype.$api = api.baseRequest;

使用
  1. this.$api('',{}).then(res=>{}).catch(err->{})