基于Bun运行时和React的高效Web应用框架
1. 概述
River是一个基于Bun运行时和React的高效Web应用框架,采用MVC(模型-视图-控制器)架构模式设计,提供完整的路由、控制器、模型和视图功能。它结合了Bun的高性能特性和React的声明式UI,旨在为开发者提供简洁的API和完整的开发体验。
2. 技术栈
- 运行时:Bun v1.2.20+(高性能JavaScript运行时和工具链)
- 前端框架:React ^19.1.1
- 类型系统:TypeScript ^5
- 数据验证:Zod ^4.1.3
- 数据库:Bun内置SQL模块
3. 项目结构
项目采用清晰的目录分层结构,遵循MVC架构模式组织代码。主要源代码位于src/目录下,按功能模块划分为核心框架、控制器、模型和视图组件等。
├── src/
│ ├── app.ts # 应用入口文件
│ ├── controller/ # 控制器目录
│ │ ├── Home.tsx # 首页控制器
│ │ ├── Post.ts # 文章控制器
│ │ └── api/ # API控制器子目录
│ ├── core/ # 核心框架代码
│ │ ├── App.ts # 应用主类
│ │ ├── Controller.ts # 控制器基类
│ │ ├── Model.ts # 模型基类
│ │ └── index.ts # 核心模块导出
│ ├── rule/ # 验证规则目录
│ │ └── post.ts # 文章验证规则
│ └── view/ # 视图组件目录
│ └── home/ # 首页相关视图组件
├── public/ # 静态资源目录
├── package.json # 项目配置和依赖
└── tsconfig.json # TypeScript配置
4. 核心功能模块
4.1 应用主类 (App)
App类是整个框架的核心组件,负责启动HTTP服务器、处理路由请求、提供静态文件服务以及错误处理。
主要功能:
- 启动HTTP服务器并监听指定端口
- 自动路由映射与控制器方法调用
- 静态文件服务(支持文件访问)
- WebSocket支持与处理
- 全局错误处理
关键方法:
listen(port, development): 启动应用服务器ws(path, handler): 配置WebSocket处理
示例用法:
import { App } from '@/core/App'
const app = new App()
app.ws('/ws', {
open(ws) {
ws.send('hello world')
},
message(ws, message) {
ws.send(message)
}
})
app.listen()
4.2 控制器基类 (Controller)
Controller类为所有控制器提供通用功能,包括请求处理、响应格式化、HTTP头管理和安全头设置等。
主要功能:
- HTTP请求处理与响应
- 多种响应格式支持(JSON、HTML)
- 内置安全头设置
- 数据验证集成
关键方法:
success(data): 返回成功JSON响应fail(msg, code): 返回错误JSON响应json(data): 返回自定义JSON响应render(view): 渲染React组件为HTMLcheck(rule, data): 使用Zod规则验证数据
示例控制器:
import { Controller } from "@/core"
export class Home extends Controller {
async index() {
return '首页'
}
}
4.3 模型基类 (Model)
Model类提供数据库操作的通用方法,基于Bun的SQL模块实现,支持常见的CRUD操作和数据验证。
主要功能:
- 数据库表的CRUD操作
- 分页查询功能
- 数据条件筛选和排序
- 数据验证(基于Zod)
关键方法:
page(params): 分页查询数据list(map, sort): 列表查询find(map, sort): 条件查询add(value): 添加记录update(id, value): 更新记录delete(map): 删除记录deleteById(id): 通过ID删除记录
5. 路由系统
框架采用约定优于配置的路由策略,自动将URL路径映射到对应的控制器和方法。
路由规则:
- URL路径的第一部分对应控制器名(自动转换为驼峰命名)
- URL路径的第二部分对应控制器方法名
- 支持分组路由,通过URL路径的第一部分进行分组
示例路由映射:
/home/index映射到 Home控制器的index方法/api/user/list映射到 Api_User控制器的list方法
6. 数据验证
框架集成了Zod库用于数据验证,支持在控制器中方便地验证请求数据。
验证规则定义:
import z from "zod";
export const postRule = z.object({
title: z.string().min(1, '标题不能为空'),
content: z.string().min(1, '内容不能为空'),
})
export type postType = z.infer<typeof postRule>
验证使用示例:
// 在控制器方法中使用
async create() {
const data = await this.req.json();
// 验证数据
const validatedData = this.check(postRule, data);
// 继续处理验证后的数据
// ...
}
7. WebSocket支持
框架内置WebSocket支持,可以方便地创建实时通信功能。
WebSocket配置:
- 通过
app.ws()方法配置WebSocket端点和处理函数 - 支持open、message、close等事件处理
示例配置:
app.ws('/ws', {
open(ws) {
ws.send('hello world')
},
message(ws, message) {
ws.send(message)
}
})
8. 安全特性
框架内置多项安全防护措施,自动为所有响应设置安全相关的HTTP头。
安全头设置:
- X-Frame-Options: DENY(防止点击劫持)
- X-XSS-Protection: 1; mode=block(防止XSS攻击)
- X-Content-Type-Options: nosniff(防止MIME类型混淆攻击)
- Strict-Transport-Security: max-age=31536000; includeSubDomains(强制HTTPS)
9. 开发与部署
9.1 安装依赖
bun install
9.2 启动开发服务器
bun run dev
9.3 启动生产服务器
bun run start
9.4 编译为可执行文件
bun run dist
10. 项目特点
- 高性能:基于Bun运行时,提供比Node.js更高的性能
- 类型安全:完整的TypeScript支持,提供更好的开发体验和代码可靠性
- 简洁API:设计简洁直观的API,降低学习成本
- MVC架构:清晰的代码组织和分离关注点
- 内置安全:自动应用多项安全最佳实践
- 实时通信:内置WebSocket支持,方便实现实时功能
- 数据验证:集成Zod库,提供强大的数据验证能力
11. 注意事项
- 确保使用的Bun版本不低于v1.2.20
- 开发模式下会显示详细错误信息,生产环境下会隐藏具体错误细节
- 删除操作需要提供筛选条件,以防止误操作删除全部数据
- 数据库操作依赖Bun的SQL模块,请确保正确配置数据库连接
- 项目使用ESM模块系统,请遵循ES模块的导入导出规范
1413

被折叠的 条评论
为什么被折叠?



