From b0b8d5b0fb654dacad0636b47927640874ddfe22 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Mon, 03 Mar 2025 13:08:02 +0800 Subject: [PATCH] 知识库文档,新增常用基类 --- _knowledges/201-常用基类.md | 142 +++++++++++++++++++++++++++++++++++++++++++++++ _knowledges/101-项目介绍.md | 2 _knowledges/102-项目规范.md | 0 3 files changed, 144 insertions(+), 0 deletions(-) diff --git "a/_knowledges/01-\351\241\271\347\233\256\344\273\213\347\273\215.md" "b/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" similarity index 98% rename from "_knowledges/01-\351\241\271\347\233\256\344\273\213\347\273\215.md" rename to "_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" index 1f78cd7..4476b55 100644 --- "a/_knowledges/01-\351\241\271\347\233\256\344\273\213\347\273\215.md" +++ "b/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" @@ -319,6 +319,8 @@ } ``` +说明:请求异常由请求层的基类自动处理,数据控制层跳过错误的逻辑,只处理成功 + #### 空白请求层示例 ```js diff --git "a/_knowledges/02-\351\241\271\347\233\256\350\247\204\350\214\203.md" "b/_knowledges/102-\351\241\271\347\233\256\350\247\204\350\214\203.md" similarity index 100% rename from "_knowledges/02-\351\241\271\347\233\256\350\247\204\350\214\203.md" rename to "_knowledges/102-\351\241\271\347\233\256\350\247\204\350\214\203.md" diff --git "a/_knowledges/201-\345\270\270\347\224\250\345\237\272\347\261\273.md" "b/_knowledges/201-\345\270\270\347\224\250\345\237\272\347\261\273.md" new file mode 100644 index 0000000..3d0109e --- /dev/null +++ "b/_knowledges/201-\345\270\270\347\224\250\345\237\272\347\261\273.md" @@ -0,0 +1,142 @@ +# 常用基类 + +## 请求层基类 Fetcher.js + +类 Fetcher 是一个用于处理 HTTP 请求的工具类,包含了多种方法来简化和统一请求的处理 + +### 引用方法 + +```js +import { + Fetcher +} from '@components/bases/Fetcher'; +``` + +### 构造函数 + +构造函数接受一个配置对象 options 作为参数,包含如下属性 + +| 属性 | 类型 | 必填 | 描述 | 默认值 | +|---|---|---|---|---| +| urlPrefix | array | 是 | 请求URL的前缀 | ['/api/common/', '/api/common/'] | + +说明: +* urlPrefix数组包含两项,第一项为本地Mock的URL前缀,第二项为服务器接口的前缀,二者可以不一样 + +```js +class FCommon extends Fetcher { + // 构造函数示例 + constructor() { + super({ + urlPrefix: ['/api/order/', '/mini/order/'], + }); + } +} +``` + +### 主要方法 + +```js +/** + * 拼写 URL 地址 + * @param {String} devSuffix - 开发环境URL后缀 + * @param {String} serSuffix - 服务器环境URL后缀 + * @return {String} 拼接后的 URL 地址(不含域名) + */ +spellURL(devSuffix, serSuffix) {} + +/** + * 发送 POST 请求,query 的简写 + * @param {String} url - 请求的 URL + * @param {*} data - 请求参数 + * @param {Object} [options] - 请求选项 + * @return {Promise<any>} 返回一个 Promise 对象,解析为响应数据 + */ +post(url, data, options = {}) {} + +/** + * 基础 AJAX 请求 + * @param {String} type - 请求类型(GET 或 POST)。 + * @param {String} url - 请求的 URL。 + * @param {*} [data] - 请求参数。 + * @param {Object} [options] - 请求选项。 + * @return {Promise<any>} 返回一个 Promise 对象,解析为响应数据。 + */ +query(type, url, data = null, options = {}) {} + +/** + * 下划线字符串转小驼峰 + * @param {String} str - 下划线字符串 + * @return {String} 转换后的驼峰字符串 + */ +stringToCamel(str) {} + +/** + * 小驼峰字符串转下划线 + * @param {String} str - 小驼峰字符串 + * @return {String} 转换后的下划线字符串 + */ +stringToUnderline(str) {} + +/** + * 驼峰与下划线命名模式转换 + * @param {String} type - 'camel' 或 'underline' + * @param {Object} json - JSON 对象 + * @return {Object} 转换后的 JSON 对象 + */ +transKeyName(type, json) {} +``` + +说明: +* spellURL:拼接URL时,会根据是否处于 mock 模式来选择不同的 URL 前缀(本地开发自动使用 mock 模式) +* query:如果在小程序中,会自动存取 cookies + +### 响应处理 + +#### 处理流程 + +1. query 方法调用 Taro.request 发送请求 +2. 收到响应后,先检测响应数据格式,发现其他类型的响应格式时,会自动转换为:前端统一响应数据格式 +3. 根据响应格式,如果成功,回传递响应内容进数据控制层,如果失败,直接失败提示 + +#### 前端统一响应数据格式 + +格式如下: + +``` +{ + state: { // 状态 + code, // 状态码 + msg // 状态消息 + }, + data: { // 实际数据,必须是 Object + } +} +``` + +例如: + +```json +{ + "state": { + "code": 2000, + "msg": "OK" + }, + "data": { + "id": 1, + "name": "Tevin" + } +} +``` + +注意,为了保证接口数据的扩展性,data 只能接 Object 类型,禁止接其他类型 + +#### 前端统一响应状态码 + +| 状态码 | 意义 | +|---|---| +| 2000 | 通用请求成功 | +| 2001 | 请求成功,但是没有数据,弹窗提示 msg(仅特殊情况使用) | +| 5000 | 通用请求失败,弹窗提示 msg | +| 9001 | 登录已过期,返回登录页 | +| 9002 | 已登录但没有操作权限,弹窗提示 msg | -- Gitblit v1.9.1