befly-shared 2.0.7 → 2.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/utils/createStore.js +31 -0
- package/utils/createHttp.md +0 -123
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "befly-shared",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.8",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Befly Shared - 通用工具函数库",
|
|
6
6
|
"type": "module",
|
|
@@ -21,5 +21,5 @@
|
|
|
21
21
|
"engines": {
|
|
22
22
|
"bun": ">=1.3.0"
|
|
23
23
|
},
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "a6aba466befdacde57c4b45c9cd003d52e2cb531"
|
|
25
25
|
}
|
package/utils/createStore.js
CHANGED
|
@@ -50,6 +50,37 @@ function createStorageApi(storage) {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
return parseValue(storage.getItem(key), defaultValue);
|
|
53
|
+
},
|
|
54
|
+
remove(key) {
|
|
55
|
+
if (typeof key !== "string" || key.trim() === "") {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!storage || typeof storage.removeItem !== "function") {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
storage.removeItem(key);
|
|
64
|
+
return true;
|
|
65
|
+
},
|
|
66
|
+
has(key) {
|
|
67
|
+
if (typeof key !== "string" || key.trim() === "") {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (!storage) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return storage.getItem(key) !== null;
|
|
76
|
+
},
|
|
77
|
+
clear() {
|
|
78
|
+
if (!storage || typeof storage.clear !== "function") {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
storage.clear();
|
|
83
|
+
return true;
|
|
53
84
|
}
|
|
54
85
|
};
|
|
55
86
|
}
|
package/utils/createHttp.md
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# createHttp
|
|
2
|
-
|
|
3
|
-
## 功能说明
|
|
4
|
-
|
|
5
|
-
`createHttp(options)` 用于创建一个通用 POST 请求函数,支持:
|
|
6
|
-
|
|
7
|
-
- JSON 请求体自动序列化
|
|
8
|
-
- `FormData` 自动直传
|
|
9
|
-
- 默认值/按字段值过滤(`dropValues`、`dropKeyValue`)
|
|
10
|
-
- 自动附带 Bearer Token
|
|
11
|
-
- 统一响应与错误结构处理
|
|
12
|
-
|
|
13
|
-
创建后返回的请求函数签名为:
|
|
14
|
-
|
|
15
|
-
- `requestPost(url, data, dropValues, dropKeyValue)`
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 入参
|
|
20
|
-
|
|
21
|
-
### createHttp(options)
|
|
22
|
-
|
|
23
|
-
- `options.apiPath`:`string`
|
|
24
|
-
- 接口前缀,例如:`http://localhost:3000/api`
|
|
25
|
-
- `options.getToken`:`() => string`
|
|
26
|
-
- 获取 token 的函数
|
|
27
|
-
- 返回空字符串时不会添加 `Authorization`
|
|
28
|
-
|
|
29
|
-
### requestPost(url, data, dropValues, dropKeyValue)
|
|
30
|
-
|
|
31
|
-
- `url`:`string`
|
|
32
|
-
- 业务接口路径,例如:`/core/login`
|
|
33
|
-
- `data`:`object | FormData`
|
|
34
|
-
- 普通对象会按 JSON 发送
|
|
35
|
-
- `FormData` 会按表单发送
|
|
36
|
-
- `dropValues`:`Array<any>`(可选)
|
|
37
|
-
- 全局过滤值列表
|
|
38
|
-
- 默认:`[null, undefined]`
|
|
39
|
-
- `dropKeyValue`:`Record<string, Array<any>>`(可选)
|
|
40
|
-
- 按字段过滤值
|
|
41
|
-
- 例如:`{ page: [0], keyword: [""] }`
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## 返回值
|
|
46
|
-
|
|
47
|
-
### 成功
|
|
48
|
-
|
|
49
|
-
返回后端 JSON 对象(要求后端 `code === 0`)。
|
|
50
|
-
|
|
51
|
-
### 失败
|
|
52
|
-
|
|
53
|
-
Promise reject 对象结构:
|
|
54
|
-
|
|
55
|
-
- `msg`: 错误消息
|
|
56
|
-
- `code`: 后端业务码(可选)
|
|
57
|
-
- `detail`: 后端明细(可选)
|
|
58
|
-
|
|
59
|
-
特殊情况:
|
|
60
|
-
|
|
61
|
-
- 响应可读但 JSON 解析失败:`{ msg: "响应解析失败" }`
|
|
62
|
-
- 非 2xx 且无法按业务格式解析:`{ code: HTTP状态码, msg: "请求失败:HTTP xxx" }`
|
|
63
|
-
- 网络异常:`{ msg: "网络连接失败" }`
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## 使用示例
|
|
68
|
-
|
|
69
|
-
### 1)创建实例
|
|
70
|
-
|
|
71
|
-
```javascript
|
|
72
|
-
import { createHttp } from "befly-shared/createHttp";
|
|
73
|
-
|
|
74
|
-
const $Http = createHttp({
|
|
75
|
-
apiPath: "http://localhost:3000/api",
|
|
76
|
-
getToken: () => localStorage.getItem("befly-admin-token") ?? ""
|
|
77
|
-
});
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### 2)JSON 请求
|
|
81
|
-
|
|
82
|
-
```javascript
|
|
83
|
-
const res = await $Http("/core/user/list", {
|
|
84
|
-
page: 1,
|
|
85
|
-
limit: 30,
|
|
86
|
-
keyword: ""
|
|
87
|
-
});
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### 3)FormData 请求
|
|
91
|
-
|
|
92
|
-
```javascript
|
|
93
|
-
const form = new FormData();
|
|
94
|
-
form.append("file", file);
|
|
95
|
-
form.append("remark", "头像");
|
|
96
|
-
|
|
97
|
-
const res = await $Http("/core/upload/file", form);
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### 4)过滤默认值
|
|
101
|
-
|
|
102
|
-
```javascript
|
|
103
|
-
const res = await $Http("/core/user/list", { page: 1, limit: 30, keyword: "", state: null }, [null, undefined, ""], { page: [0] });
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## 行为细节
|
|
107
|
-
|
|
108
|
-
- 当 `data instanceof FormData` 时:
|
|
109
|
-
- 不设置 `Content-Type`(由浏览器自动带 boundary)
|
|
110
|
-
- `body` 直接传 `FormData`
|
|
111
|
-
- 当 `data` 是普通对象时:
|
|
112
|
-
- 设置 `Content-Type: application/json`
|
|
113
|
-
- `body` 为 `JSON.stringify(data)`
|
|
114
|
-
- 有 token 时自动设置:
|
|
115
|
-
- `Authorization: Bearer <token>`
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
## 注意事项
|
|
120
|
-
|
|
121
|
-
- 后端响应格式建议统一为 `{ code, msg, data, detail }`
|
|
122
|
-
- 仅当 `code === 0` 视为成功
|
|
123
|
-
- 该实现固定为 `POST` 请求
|