01-Elysia架构基础规范
分类:4-全栈/01-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注入防护
- 敏感信息加密