From 5cc77cd612dea00657fea76ae6e5a31fc89fa6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE=E6=96=87=E8=B1=AA?= <980287353@qq.com> Date: Fri, 20 May 2022 15:16:01 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0https=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 13 ++++---- src/https/request.js | 59 ++++++++++++++++++++++++++++++++++ src/utils/Common.js | 76 ++++++++++++++++++++++++++++++++++++++++++++ src/utils/Storage.js | 19 +++++++++++ 4 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 src/https/request.js create mode 100644 src/utils/Common.js create mode 100644 src/utils/Storage.js diff --git a/package.json b/package.json index b99bca1..3f7ffd2 100644 --- a/package.json +++ b/package.json @@ -20,16 +20,17 @@ ] }, "dependencies": { - "@umijs/plugin-helmet": "1.1.4", - "umi": "3.3.14" + "@umijs/plugin-helmet": "1.1.4", + "umi": "3.3.14", + "umi-request": "1.4.0" }, "devDependencies": { + "@umijs/fabric": "2.10.2", + "eslint": "7.32.0", "lint-staged": "10.5.4", + "prettier": "2.6.2", "react": "16.14.0", "react-dom": "16.14.0", - "yorkie": "2.0.0", - "@umijs/fabric": "2.10.2", - "prettier": "2.6.2", - "eslint": "7.32.0" + "yorkie": "2.0.0" } } diff --git a/src/https/request.js b/src/https/request.js new file mode 100644 index 0000000..c377e62 --- /dev/null +++ b/src/https/request.js @@ -0,0 +1,59 @@ +/** + * request 网络请求工具 + * 更详细的 api 文档: https://github.com/umijs/umi-request + */ +import {extend} from "umi-request"; +import Common from "@/utils/Common"; +import Storage from "@/utils/Storage"; + +const codeMessage = { + 200: "服务器成功返回请求的数据。", + 201: "新建或修改数据成功。", + 202: "一个请求已经进入后台排队(异步任务)。", + 204: "删除数据成功。", + 400: "发出的请求有错误,服务器没有进行新建或修改数据的操作。", + 401: "用户没有权限(令牌、用户名、密码错误)。", + 403: "用户得到授权,但是访问是被禁止的。", + 404: "发出的请求针对的是不存在的记录,服务器没有进行操作。", + 406: "请求的格式不可得。", + 410: "请求的资源被永久删除,且不会再得到的。", + 422: "当创建一个对象时,发生一个验证错误。", + 500: "服务器发生错误,请检查服务器。", + 502: "网关错误。", + 503: "服务不可用,服务器暂时过载或维护。", + 504: "网关超时。", +}; + +/** + * 异常处理程序 + */ +const errorHandler = error => { + const {response = {}} = error; + let res = {code: -1, message: "参数错误或服务器异常"}; + if (!Common.isEmpty(res)) { + res = {code: response.status, message: codeMessage[response.status] || response.statusText}; + } + return res; +}; + + +/** + * 配置request请求时的默认参数 + */ +const request = extend({ + errorHandler, // 默认错误处理 + credentials: "include", // 默认请求是否带上cookie, + requestType: "json", // 表单提交post请求 +}); + +//请求拦截器 +request.interceptors.request.use((url, options) => { + let newOptions = {...options}; + + // 请求头处理 + newOptions.headers["token"] = Storage.getUserToken(); + + return {url, options: newOptions}; +}); + +export default request; diff --git a/src/utils/Common.js b/src/utils/Common.js new file mode 100644 index 0000000..1b10aac --- /dev/null +++ b/src/utils/Common.js @@ -0,0 +1,76 @@ +/** + * 获取Url中的参数 + */ +const getParamFormUrl = (key, host) => { + let arr; + let reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)"); + try { + let testHost = window.location.href; + if (host) { + testHost = host; + } + if ((arr = testHost.split("?")[1].match(reg))) { + return decodeURI(arr[2]); + } + } catch (e) { + } + return ""; +} + +/** + * 是否为空 + * @param value + * @returns {boolean} + */ +const isEmpty = (value) => { + return value === undefined || value === null || value === ""; +} + + +/** + * 转换为json + * @param value + * @param def + */ +const parseJSON = (value, def = {}) => { + let obj; + try { + obj = JSON.parse(value); + } catch (e) { + } + if (!obj) { + obj = def; + } + return obj; +}; + +/** + * 将array中的某个key用seq连接起来 + * @param array + * @param seq + * @param key + */ +const join = (array = [], seq = ",", key) => { + let joinArray = array; + if (key) { + joinArray = array.map(it => it[key]); + } + return joinArray.join(seq); +} + +/** + * 分割对象 + * @param obj + * @param seq + */ +const split = (obj, seq = ",") => { + if (obj) { + return obj.split(seq); + } + return []; +} + + +export default { + getParamFormUrl, isEmpty, parseJSON, join, split, +} diff --git a/src/utils/Storage.js b/src/utils/Storage.js new file mode 100644 index 0000000..d4436ff --- /dev/null +++ b/src/utils/Storage.js @@ -0,0 +1,19 @@ +///////////////////////////////////////// 用户token +/** + * 保存用户token + * @param token + */ +const saveUserToken = (token) => { + sessionStorage.setItem("saveUserToken", token); +} + +const getUserToken = () => { + return sessionStorage.getItem("saveUserToken") || "" +} + + +///////////////////////////////////////// 导出模块 + +export default { + saveUserToken, getUserToken, +}