基于Bun运行时和React的高效Web应用框架

基于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组件为HTML
  • check(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. 注意事项

  1. 确保使用的Bun版本不低于v1.2.20
  2. 开发模式下会显示详细错误信息,生产环境下会隐藏具体错误细节
  3. 删除操作需要提供筛选条件,以防止误操作删除全部数据
  4. 数据库操作依赖Bun的SQL模块,请确保正确配置数据库连接
  5. 项目使用ESM模块系统,请遵循ES模块的导入导出规范
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值