使用 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 与环境

  1. 创建一个 Neon 数据库并复制连接字符串:

    DATABASE_URL="postgres://your-connection-string"
  2. 安装依赖:

    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 /todos
  • POST /todos
  • PATCH /todos/:id
  • DELETE /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 等无服务器工具的轻松集成。无论是原型开发还是扩展生产系统,它都是一个强大、现代的后端选择。

Back to Blog

相关文章

阅读更多 »

我用200行代码构建了自己的Mailchimp替代方案

有没有看过你的 Mailchimp 账单,然后想“我完全可以自己搞定”?我曾经这么想,而且我证明了自己是对的。我需要为我的 SaaS 发送 drip emails——一个简单的 3 步 onboarding sequence……