WebApp【公共组件库】@前端(For Git Submodule)
‘chensiAb’
2025-03-25 3b03f87a02458f719e2eb4bf112a13441b427d14
_cursor.ai/rules/fit-base-fetcher.mdc
File was renamed from _cursor.ai/201-请求层基类Fetcher.md
@@ -1,25 +1,10 @@
# 请求层基类 Fetcher.js
---
description: 数据控制器基类,所有数据控制器都必须继承此类
globs:
alwaysApply: false
---
- [请求层基类 Fetcher.js](#请求层基类-fetcherjs)
  - [功能说明](#功能说明)
  - [引用方法](#引用方法)
  - [构造函数](#构造函数)
  - [主要方法](#主要方法)
    - [`spellURL(devSuffix, serSuffix)`](#spellurldevsuffix-sersuffix)
    - [`get(url, data, options)`](#geturl-data-options)
    - [`post(url, data, options)`](#posturl-data-options)
    - [`query(type, url, data, options)`](#querytype-url-data-options)
    - [`stringToCamel(str)`](#stringtocamelstr)
    - [`stringToUnderline(str)`](#stringtounderlinestr)
    - [`transKeyName(type, json)`](#transkeynametype-json)
  - [请求的 options 配置](#请求的-options-配置)
    - [`hostType` 主机类型](#hosttype-主机类型)
    - [`silence` 静音请求](#silence-静音请求)
  - [响应处理](#响应处理)
    - [处理流程](#处理流程)
    - [前端统一响应数据格式](#前端统一响应数据格式)
    - [前端统一响应状态码](#前端统一响应状态码)
  - [请求调用](#请求调用)
# 请求层基类 Fetcher.js
## 功能说明
@@ -29,15 +14,14 @@
## 引用方法
```js
import {
    Fetcher
} from '@components/bases/Fetcher';
import { Fetcher } from '@components/bases/Fetcher';
```
## 构造函数
构造函数接受一个配置对象 options 作为参数,包含如下属性:
* **urlPrefix** 数组,包含两项,第一项为本地 Mock 的 URL 前缀,第二项为服务器接口的前缀
构造函数接受一个配置对象作为参数,包含如下属性:
- **urlPrefix** 数组,包含两项,第一项为本地 Mock 的 URL 前缀,第二项为服务器接口的前缀
```js
class FCommon extends Fetcher {
@@ -133,7 +117,7 @@
- `type` (String):请求类型(如 `'get'`、`'post'`)
- `url` (String):请求的 URL 地址
- `data` (Object,可选):请求参数
- `options` (Object,可选):请求配置
- `options` (Object,可选):请求配置(参照下文)
**返回值**  
- (Promise):返回请求结果的 Promise
@@ -195,7 +179,7 @@
**注意事项**  
- 支持嵌套对象的递归转换
## 请求的 options 配置
## 请求 query 的 options 配置
### `hostType` 主机类型
@@ -277,7 +261,7 @@
}
```
注意,为了保证接口数据的扩展性,data 只能接 Object 类型,禁止接其他类型
注意,为了保证接口数据的扩展性,**data 只能接 Object 类型**,禁止接其他类型
### 前端统一响应状态码
@@ -294,23 +278,31 @@
```js
import { Fetcher } from '@components/bases/Fetcher';
class FCommon extends Fetcher {}
// 请求集
class FCommon extends Fetcher {
    getUserInfo(user) {
        const url = this.spellURL('getUserInfo', 'User/info');
        const send = {..user};
        return this.post(url, send);
    }
}
// 全局单例
export const $fetchCommon = new FCommon();
```
```js
import {
    $fetchCommon
} from '@fetchers/FCommon';
import { $fetchCommon } from '@fetchers/FCommon';
export class PPageName extends Pilot {
// 数据控制器
export class PUserDetail extends Pilot {
    // 在数据控制层中,发请求示例
    onLoadUserInfo() {
        Taro.showLoading();
        $fetchCommon.getUserInfo(this.userId)
        // 调用请求集发请求示例
        $fetchCommon.getUserInfo({uid: this.userId})
            .then(res => {
                Taro.hideLoading();
                if (!res) {
@@ -322,3 +314,5 @@
}
```