01-Elysia架构基础规范
分类:elysia
发布于:
阅读时间:24 分钟
Elysia 全栈架构基础规范
概述
本文档定义了基于 Elysia + Drizzle + Zod 的全栈开发架构基础规范,为开发者提供清晰的项目结构和核心技术配置指导。
核心技术栈
技术组件
- 后端框架: Elysia.js
- 数据库ORM: Drizzle ORM
- 类型校验: Zod
- 数据库: PostgreSQL (生产) / SQLite (开发)
- 包管理器: pnpm
- 代码格式化: Biome
- 构建工具: pkgroll
架构特点
- 类型安全的全栈开发
- 运行时数据校验
- 自动API文档生成
- 前后端类型同步
项目结构标准
Monorepo 结构
project/
├── apps/
│ ├── backend/ # 后端应用
│ └── frontend/ # 前端应用
├── packages/
│ ├── shared/ # 共享类型
│ └── utils/ # 工具库
├── docker/ # Docker配置
├── docs/ # 项目文档
├── package.json # 根package.json
├── turbo.json # Turbo配置
└── biome.json # 代码格式化配置
后端目录结构
src/
├── modules/ # 业务模块
│ ├── users/
│ │ ├── users.controller.ts # 控制器层
│ │ └── users.service.ts # 服务层
│ └── products/
├── db/
│ ├── models/ # 数据库Schema
│ │ ├── index.ts # 统一导出
│ │ ├── users.schema.ts # 用户表定义 # 类型模型
│ │ └── products.schema.ts # 商品表定义
│ ├── connection.ts # 数据库连接
│ └── database.types.ts # 类型转换层
├── utils/
│ ├── response.ts # 响应格式化
│ ├── errors.ts # 错误处理
│ └── common.ts # 通用工具
├── middleware/ # 中间件
├── types/ # 全局类型定义
└── app.ts # 应用入口
核心配置文件
1. package.json 脚本配置
{
"scripts": {
"dev": "turbo run dev",
"build": "turbo run build",
"clean": "rimraf dist node_modules",
"check": "biome check .",
"format": "biome format --write .",
"db:push": "drizzle-kit push",
"db:studio": "drizzle-kit studio",
"db:generate": "drizzle-kit generate"
}
}
2. turbo.json 配置
{
"$schema": "https://turborepo.com/schema.json",
"tasks": {
"build": {
"outputs": ["dist/**"],
"dependsOn": ["^build"]
},
"dev": {
"persistent": true,
"cache": false
},
"check": {
"dependsOn": ["^check"]
}
}
}
3. biome.json 代码格式化
{
"formatter": {
"enabled": true,
"lineWidth": 80,
"indentStyle": "space",
"indentSize": 2
},
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
}
}
数据库配置
环境变量配置
# 数据库连接
DATABASE_URL="postgresql://user:password@localhost:5432/dbname"
# JWT配置
JWT_SECRET="your-jwt-secret"
# 服务配置
PORT=3000
NODE_ENV="development"
数据库连接 (db/connection.ts)
import { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import * as schema from "./schema";
const connectionString = process.env.DATABASE_URL!;
const client = postgres(connectionString);
export const db = drizzle(client, { schema });
应用入口配置
基础应用设置 (src/app.ts)
import { Elysia } from "elysia";
import { cors } from "@elysiajs/cors";
import { swagger } from "@elysiajs/swagger";
import { errorHandler } from "./middleware/error";
const app = new Elysia()
.use(cors())
.use(swagger({
documentation: {
info: {
title: "API Documentation",
version: "1.0.0",
description: "基于 Elysia 的全栈API"
}
}
}))
.use(errorHandler)
.get("/", () => ({ message: "API Server Running" }))
.listen(3000);
console.log(`🦊 Elysia server running at ${app.server?.hostname}:${app.server?.port}`);
核心原则
1. 分层架构
- Controller层: 处理HTTP请求,参数验证,响应格式化
- Service层: 业务逻辑处理,数据库操作
- Model层: 类型定义,数据验证
- Schema层: 数据库表结构定义
2. 类型安全
- 所有API接口必须有明确的类型定义
- 使用Zod进行运行时数据校验
- 前后端共享TypeScript类型
3. 错误处理
- Service层抛出具体错误
- Controller层统一错误响应格式
- 使用自定义错误类替代通用Error
4. 代码规范
- 使用Biome统一代码格式
- 遵循TypeScript严格模式
- 所有函数必须有明确的返回类型
开发工作流
1. 项目初始化
# 创建项目
pnpm create elysia my-app
cd my-app
# 安装依赖
pnpm add drizzle-orm drizzle-kit postgres
pnpm add -D @types/node
# 初始化数据库
pnpm drizzle-kit generate
pnpm drizzle-kit push
2. 开发流程
- 定义数据库Schema
- 生成Zod校验规则
- 实现Service业务逻辑
- 创建Controller路由
- 编写测试用例
3. 代码提交前检查
# 代码格式检查
pnpm biome check .
# 类型检查
pnpm tsc --noEmit
# 运行测试
pnpm test
最佳实践
1. 模块化设计
- 每个业务实体独立成模块
- 统一的文件命名和结构
- 清晰的依赖关系
2. 类型复用
- 基于数据库Schema生成类型
- 避免重复定义类型
- 使用namespace组织相关类型
3. 性能优化
- 数据库查询使用索引
- 实现分页和缓存
- 避免N+1查询问题
4. 安全考虑
- 输入数据验证
- SQL注入防护
- 敏感信息加密