使用 HonoJS、Drizzle ORM 与 Neon 构建 Todo API — 初学者友好指南
发布: (2026年1月6日 GMT+8 12:11)
4 min read
原文: Dev.to
Source: Dev.to
Source: …
🚀 HonoJS 入门指南 — 路由 + Drizzle + Neon Todo API
HonoJS 是一个超高速、轻量级的 Web 框架,旨在为 Node.js、Bun、Deno 以及 Cloudflare Workers、Vercel Edge Functions 等边缘运行时构建 API。
在本教程中,你将:
- 学习 Hono 的简易路由
- 使用 Drizzle ORM + Neon PostgreSQL 构建 Todo API
- 讨论为何这套技术栈适合现代后端
- 观看两个基于 Hono 的真实项目案例
为什么选择 HonoJS?
- 极快且轻量
- 多运行时兼容
- TypeScript 优先
- 友好的中间件机制
它提供了类似 Express 的强大功能,但针对边缘和无服务器环境进行了优化。
npm create hono@latest
# or
pnpm create hono@latest
yarn create hono@latest
基本示例(index.ts)
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('👋 Hello from Hono!'));
app.get('/api/hello', (c) => {
return c.json({ message: 'This is a JSON response!' });
});
export default app;
npm run dev
现在,你已经拥有一个功能完整、路由清晰且类型安全的 API。
使用 Hono + Drizzle + Neon 的 Todo API
我们将结合:
- Hono → API 路由器
- Neon → 无服务器 PostgreSQL
- Drizzle ORM → 类型安全的数据库层
🧠 第一步 — 设置 Neon 与环境
-
创建一个 Neon 数据库并复制连接字符串:
DATABASE_URL="postgres://your-connection-string" -
安装依赖:
npm install hono @neondatabase/serverless drizzle-orm drizzle-kit
定义模式 (src/db/schema.ts)
import { pgTable, serial, text, boolean, timestamp } from 'drizzle-orm/pg-core';
export const todos = pgTable('todos', {
id: serial('id').primaryKey(),
content: text('content').notNull(),
completed: boolean('completed').default(false).notNull(),
createdAt: timestamp('created_at').defaultNow().notNull(),
});
初始化 Drizzle (src/db/index.ts)
import { drizzle } from 'drizzle-orm/neon-http';
import { neon } from '@neondatabase/serverless';
import * as schema from './schema';
const sql = neon(process.env.DATABASE_URL!);
export const db = drizzle(sql, { schema });
构建 API (src/app.ts)
import { Hono } from 'hono';
import { db } from './db';
import { todos } from './db/schema';
const app = new Hono();
// Get all todos
app.get('/todos', async (c) => {
const all = await db.select().from(todos);
return c.json(all);
});
// Create a todo
app.post('/todos', async (c) => {
const { content } = await c.req.json();
const newTodo = await db.insert(todos).values({ content }).returning();
return c.json(newTodo);
});
// Mark a todo as completed
app.patch('/todos/:id', async (c) => {
const id = Number(c.req.param('id'));
const updated = await db
.update(todos)
.set({ completed: true })
.where(todos.id.eq(id))
.returning();
return c.json(updated);
});
// Delete a todo
app.delete('/todos/:id', async (c) => {
const id = Number(c.req.param('id'));
await db.delete(todos).where(todos.id.eq(id));
return c.text('Deleted');
});
export default app;
您现在拥有完整的 REST API:
GET /todosPOST /todosPATCH /todos/:idDELETE /todos/:id
🧩 Stack Summary
- Hono – 快速且适用于边缘
- Drizzle – 类型安全的 SQL
- Neon – 可扩展的无服务器 Postgres
非常适合微服务和 API。
🙌 实际项目使用 Hono
- MoneySense.ai – 智能金融洞察
- MenuGo.live – 现代数字餐厅平台
两者均依赖 Hono 驱动的后端,以实现可靠性和性能。
扩展 Todo API
考虑添加:
- 身份验证(JWT、Clerk、Lucia)
- 使用 Zod 进行请求验证
- 分析与日志记录
- Todo API 的前端 UI
结论
HonoJS 提供面向边缘的性能、简洁的路由、强大的 TypeScript 支持,以及与 Neon 等无服务器工具的轻松集成。无论是原型开发还是扩展生产系统,它都是一个强大、现代的后端选择。