befly 3.9.12 → 3.9.13

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.
@@ -0,0 +1,331 @@
1
+ # Quickstart 快速入门
2
+
3
+ > 5 分钟搭建你的第一个 Befly API 服务
4
+
5
+ ## 目录
6
+
7
+ - [环境准备](#环境准备)
8
+ - [项目结构](#项目结构)
9
+ - [第一个 API](#第一个-api)
10
+ - [配置数据库](#配置数据库)
11
+ - [定义表结构](#定义表结构)
12
+ - [同步数据库](#同步数据库)
13
+ - [启动服务](#启动服务)
14
+ - [下一步](#下一步)
15
+
16
+ ---
17
+
18
+ ## 环境准备
19
+
20
+ ### 必需软件
21
+
22
+ | 软件 | 版本要求 | 说明 |
23
+ | ----- | -------- | ----------------- |
24
+ | Bun | >= 1.0 | JavaScript 运行时 |
25
+ | MySQL | >= 8.0 | 数据库 |
26
+ | Redis | >= 6.0 | 缓存(可选) |
27
+
28
+ ### 安装 Bun
29
+
30
+ ```bash
31
+ # Windows (PowerShell)
32
+ powershell -c "irm bun.sh/install.ps1 | iex"
33
+
34
+ # macOS / Linux
35
+ curl -fsSL https://bun.sh/install | bash
36
+ ```
37
+
38
+ ### 创建项目
39
+
40
+ ```bash
41
+ # 克隆模板项目
42
+ git clone https://github.com/chenbimo/befly-tpl.git my-api
43
+ cd my-api
44
+
45
+ # 安装依赖
46
+ bun install
47
+ ```
48
+
49
+ ---
50
+
51
+ ## 项目结构
52
+
53
+ ```
54
+ my-api/
55
+ ├── apis/ # API 接口目录
56
+ │ └── user/
57
+ │ └── login.ts # 用户登录接口
58
+ ├── tables/ # 表定义目录
59
+ │ └── user.json # 用户表定义
60
+ ├── configs/ # 配置文件目录
61
+ │ ├── befly.common.json # 公共配置
62
+ │ ├── befly.dev.json # 开发环境配置
63
+ │ └── befly.prod.json # 生产环境配置
64
+ ├── main.ts # 入口文件
65
+ └── package.json
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 第一个 API
71
+
72
+ ### 创建 API 文件
73
+
74
+ 在 `apis/user/` 目录下创建 `login.ts`:
75
+
76
+ ```typescript
77
+ import type { ApiRoute } from 'befly-core/types';
78
+
79
+ export default {
80
+ name: '用户登录',
81
+ method: 'POST',
82
+ auth: false, // 不需要登录
83
+ fields: {
84
+ email: { name: '邮箱', type: 'string', min: 5, max: 100, regexp: '@email' },
85
+ password: { name: '密码', type: 'string', min: 6, max: 100 }
86
+ },
87
+ required: ['email', 'password'],
88
+ handler: async (befly, ctx) => {
89
+ // 查询用户
90
+ const user = await befly.db.getDetail({
91
+ table: 'user',
92
+ columns: ['id', 'email', 'password', 'nickname'],
93
+ where: { email: ctx.body.email }
94
+ });
95
+
96
+ if (!user?.id) {
97
+ return No('用户不存在');
98
+ }
99
+
100
+ // 验证密码
101
+ const isValid = await befly.cipher.verifyPassword(ctx.body.password, user.password);
102
+ if (!isValid) {
103
+ return No('密码错误');
104
+ }
105
+
106
+ // 签发令牌
107
+ const token = befly.jwt.sign({ userId: user.id });
108
+
109
+ return Yes('登录成功', { token: token, user: { id: user.id, nickname: user.nickname } });
110
+ }
111
+ } as ApiRoute;
112
+ ```
113
+
114
+ ### API 路由规则
115
+
116
+ 文件路径自动转换为路由:
117
+
118
+ | 文件路径 | 路由路径 |
119
+ | ----------------------- | ------------------------- |
120
+ | `apis/user/login.ts` | `POST /api/user/login` |
121
+ | `apis/user/register.ts` | `POST /api/user/register` |
122
+ | `apis/article/list.ts` | `POST /api/article/list` |
123
+
124
+ ---
125
+
126
+ ## 配置数据库
127
+
128
+ ### 编辑配置文件
129
+
130
+ 修改 `configs/befly.dev.json`:
131
+
132
+ ```json
133
+ {
134
+ "db": {
135
+ "type": "mysql",
136
+ "host": "127.0.0.1",
137
+ "port": 3306,
138
+ "user": "root",
139
+ "password": "your_password",
140
+ "database": "my_api"
141
+ },
142
+ "redis": {
143
+ "host": "127.0.0.1",
144
+ "port": 6379,
145
+ "password": ""
146
+ },
147
+ "auth": {
148
+ "secret": "your-jwt-secret-change-in-production",
149
+ "expiresIn": "7d"
150
+ },
151
+ "logger": {
152
+ "debug": 1,
153
+ "console": 1
154
+ }
155
+ }
156
+ ```
157
+
158
+ ### 创建数据库
159
+
160
+ ```sql
161
+ CREATE DATABASE my_api CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
162
+ ```
163
+
164
+ ---
165
+
166
+ ## 定义表结构
167
+
168
+ ### 创建表定义文件
169
+
170
+ 在 `tables/` 目录下创建 `user.json`:
171
+
172
+ ```json
173
+ {
174
+ "email": "邮箱|string|5|100||true|^[\\w.-]+@[\\w.-]+\\.[a-zA-Z]{2,}$",
175
+ "password": "密码|string|6|100||true",
176
+ "nickname": "昵称|string|2|50|用户",
177
+ "avatar": "头像|string|0|500",
178
+ "phone": "手机号|string|0|20"
179
+ }
180
+ ```
181
+
182
+ ### 字段定义格式
183
+
184
+ 格式:`"字段标签|类型|最小|最大|默认|必填|正则"`
185
+
186
+ | 位置 | 说明 | 示例 |
187
+ | ---- | ----------- | --------------------- |
188
+ | 1 | 字段标签 | `邮箱` |
189
+ | 2 | 数据类型 | `string` / `number` |
190
+ | 3 | 最小值/长度 | `5` |
191
+ | 4 | 最大值/长度 | `100` |
192
+ | 5 | 默认值 | `用户` |
193
+ | 6 | 是否必填 | `true` / `false` |
194
+ | 7 | 正则验证 | `@email` 或自定义正则 |
195
+
196
+ ### 自动字段
197
+
198
+ 每个表自动添加:
199
+
200
+ | 字段 | 类型 | 说明 |
201
+ | ------------ | ------- | ------------------------------- |
202
+ | `id` | BIGINT | 主键,自增 |
203
+ | `created_at` | BIGINT | 创建时间戳 |
204
+ | `updated_at` | BIGINT | 更新时间戳 |
205
+ | `state` | TINYINT | 状态(1=正常,0=禁用,-1=删除) |
206
+
207
+ ---
208
+
209
+ ## 同步数据库
210
+
211
+ ### 运行同步命令
212
+
213
+ ```bash
214
+ # 全量同步(表结构 + API + 菜单 + 开发账户)
215
+ bun befly sync
216
+
217
+ # 或单独同步
218
+ bun befly sync:db # 只同步表结构
219
+ bun befly sync:api # 只同步 API 路由
220
+ ```
221
+
222
+ ### 验证同步结果
223
+
224
+ ```bash
225
+ # 查看数据库
226
+ mysql -u root -p my_api -e "SHOW TABLES;"
227
+
228
+ # 应该看到:
229
+ # +------------------+
230
+ # | Tables_in_my_api |
231
+ # +------------------+
232
+ # | user |
233
+ # +------------------+
234
+ ```
235
+
236
+ ---
237
+
238
+ ## 启动服务
239
+
240
+ ### 开发模式
241
+
242
+ ```bash
243
+ bun run dev
244
+ ```
245
+
246
+ 服务启动后:
247
+
248
+ ```
249
+ 🚀 Befly 服务已启动
250
+ 📍 http://localhost:3000
251
+ ```
252
+
253
+ ### 测试 API
254
+
255
+ ```bash
256
+ # 测试登录接口
257
+ curl -X POST http://localhost:3000/api/user/login \
258
+ -H "Content-Type: application/json" \
259
+ -d '{"email":"test@example.com","password":"123456"}'
260
+ ```
261
+
262
+ 响应示例:
263
+
264
+ ```json
265
+ {
266
+ "code": 0,
267
+ "msg": "登录成功",
268
+ "data": {
269
+ "token": "eyJhbGciOiJIUzI1NiIs...",
270
+ "user": {
271
+ "id": 1,
272
+ "nickname": "用户"
273
+ }
274
+ }
275
+ }
276
+ ```
277
+
278
+ ---
279
+
280
+ ## 下一步
281
+
282
+ ### 学习更多
283
+
284
+ | 主题 | 文档 | 说明 |
285
+ | ---------- | ------------------------------ | -------------------- |
286
+ | API 开发 | [api.md](./api.md) | API 定义、字段、权限 |
287
+ | 表结构 | [table.md](./table.md) | 表定义格式详解 |
288
+ | 数据库操作 | [database.md](./database.md) | CRUD 操作 |
289
+ | 配置系统 | [config.md](./config.md) | 配置文件说明 |
290
+ | 插件开发 | [plugin.md](./plugin.md) | 自定义插件 |
291
+ | Hook 开发 | [hook.md](./hook.md) | 请求处理钩子 |
292
+ | 验证系统 | [validator.md](./validator.md) | 参数验证 |
293
+ | 日志系统 | [logger.md](./logger.md) | 日志配置 |
294
+ | 加密工具 | [cipher.md](./cipher.md) | 加密与 JWT |
295
+ | 同步命令 | [sync.md](./sync.md) | 数据库同步 |
296
+
297
+ ### 常用命令
298
+
299
+ ```bash
300
+ # 开发
301
+ bun run dev # 启动开发服务
302
+ bun befly sync # 同步数据库
303
+ bun befly sync:db # 只同步表结构
304
+
305
+ # 生产
306
+ bun run build # 构建
307
+ bun run start # 启动生产服务
308
+ ```
309
+
310
+ ### 项目示例
311
+
312
+ ```
313
+ apis/
314
+ ├── user/
315
+ │ ├── login.ts # 登录
316
+ │ ├── register.ts # 注册
317
+ │ ├── info.ts # 获取信息
318
+ │ └── update.ts # 更新信息
319
+ ├── article/
320
+ │ ├── list.ts # 文章列表
321
+ │ ├── detail.ts # 文章详情
322
+ │ ├── create.ts # 创建文章
323
+ │ └── delete.ts # 删除文章
324
+ └── common/
325
+ └── upload.ts # 文件上传
326
+
327
+ tables/
328
+ ├── user.json # 用户表
329
+ ├── article.json # 文章表
330
+ └── category.json # 分类表
331
+ ```