前言
最近在开发一个新项目时想尝试下新框架 Hono,发现市面上的后端脚手架要么太重,要么太轻,要么就是配置复杂。作为一个追求效率的开发者,我决定自己动手搭建一个开箱即用的后端脚手架。今天给大家分享这个基于 Hono + TypeScript + PostgreSQL 的后端项目模板,它集成了现代后端开发的最佳实践,让你可以专注于业务逻辑,而不是重复配置。
🎯 项目亮点
1. 技术栈现代化
-
Hono: 轻量级、高性能的 Web 框架
-
TypeScript: 类型安全,开发体验极佳
-
PostgreSQL + Drizzle ORM: 强大的数据库解决方案
-
Bun: 超快的 JavaScript 运行时
-
Zod: 运行时类型验证
2. 开箱即用的功能
-
✅ 用户认证系统(JWT + Argon2 密码加密)
-
✅ 请求限流中间件
-
✅ 统一错误处理
-
✅ 结构化日志(Pino)
-
✅ CORS 配置
-
✅ 健康检查接口
-
✅ 定时任务支持
-
✅ 数据库迁移工具
3. 开发体验优化
-
🗒️ ESLint + Prettier 代码规范
-
📝 Conventional Commits 提交规范
-
🚀 Git Hooks 自动检查
-
📊 Drizzle Studio 数据库管理界面
快速开始
1. 克隆项目
git clone https://github.com/zlmica/hono-backend-starter.git
cd hono-backend-starter
2. 安装依赖
bun install
3. 配置环境变量
cp env.example .env # 编辑 .env 文件,配置数据库连接等信息
4. 启动 PostgreSQL 数据库
# 使用 Docker Compose 启动 PostgreSQL
docker-compose up postgres -d
5. 初始化数据库
# 执行数据库迁移,创建表结构
bun run db:migrate
# 可选:填充测试数据
bun run db:seed
6. 启动开发服务器
bun run dev
就这么简单!你的后端服务就启动了。
🏗️ 项目架构
src/
├── app.ts # 应用主文件
├── index.ts # 入口文件
├── env.ts # 环境变量配置
├── db/ # 数据库相关
│ ├── index.ts # 数据库连接
│ ├── schema.ts # 数据库模式
│ └── schemas/ # 表结构定义
├── lib/ # 工具库
├── middlewares/ # 中间件
├── routes/ # 路由
└── utils/ # 工具函数
核心功能展示
用户认证系统
项目内置了完整的用户认证流程:
// 用户注册
POST /auth/register
{
"username": "testuser",
"password": "password123",
"name": "测试用户",
"phone": "13800138000"
}
// 用户登录
POST /auth/login
{
"username": "testuser",
"password": "password123"
}
中间件系统
// 请求限流
app.use(limiter(100)) // 每分钟最多100次请求
// 认证中间件
app.use(authMiddleware) // 验证JWT token
// 统一响应格式
app.use(responseWrapper) // 自动包装响应数据
数据库操作
使用 Drizzle ORM,类型安全的数据库操作:
// 查询用户
const user = await db.select().from(users).where(eq(users.id, 1))
// 创建用户
const newUser = await db.insert(users).values({
username: 'newuser',
password: hashedPassword,
name: '新用户',
phone: '13900139000'
})
🚀 部署方案
项目提供了多种部署方式:
本地部署
bun run deploy
服务器部署
bun run deploy:server
Docker 部署
docker-compose up -d
📈 性能优化
-
Hono 框架: 基于 Web 标准,性能优异
-
Bun 运行时: 比 Node.js 快 3-4 倍
-
连接池: 数据库连接复用
-
缓存策略: ETag 支持
-
压缩: 自动响应压缩
开发规范
Git 提交规范
# 使用交互式提交
bun run commit
# 或手动提交
git commit -m "feat: 添加用户管理功能"
代码检查
# 检查代码
bun run lint
# 自动修复
bun run lint:fix
🔧 扩展指南
添加新的路由
// src/routes/product.index.ts
import { createRouter } from '../lib/create-app'
const products = new createRouter()
products.get('/', async (c) => {
return c.json({ message: '产品列表' })
})
export default products
添加新的数据库表
// src/db/schemas/product.ts
import { pgTable, serial, text } from 'drizzle-orm/pg-core'
export const products = pgTable('products', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
description: text('description'),
})
适用场景
-
🏢 企业内部系统
-
🚀 创业项目 MVP
-
📱 移动应用后端
-
▫️ 中小型 Web 应用
-
📖 学习 TypeScript 后端开发
学习资源
贡献指南
欢迎提交 Issue 和 Pull Request!
-
Fork 项目
-
创建功能分支
-
提交更改
-
推送到分支
-
创建 Pull Request
结语
这个项目是我在实际开发中总结实践试出来的,希望能帮助到有同样需求的开发者。如果你觉得有用,请给个 ⭐️ 支持一下!项目地址 有什么问题或建议,欢迎在评论区讨论!