功能指南

API 开发

Hono.js 路由、中间件和 OpenAPI 文档

架构概览

API 层使用 Hono.js(一个轻量级的 Web 框架,运行在 Next.js 之上),挂载在 /api 路径下。

  • 入口文件: apps/01mvp-web/src/server/app.ts
  • 路由目录: apps/01mvp-web/src/server/routes/
  • 中间件: apps/01mvp-web/src/server/middleware/

路由组织

路由按功能模块拆分为独立文件,在 app.ts 中统一挂载。已有 40+ 模块,包括 auth.ts(认证)、events.ts(活动)、users.ts(用户)等。

创建新 API 路由

创建路由文件:在 src/server/routes/ 下新建文件,导出 Hono 实例

// apps/01mvp-web/src/server/routes/my-route.ts
import { Hono } from "hono";

const app = new Hono()
  .get("/", async (c) => {
    return c.json({ message: "Hello" });
  })
  .post("/", async (c) => {
    const body = await c.req.json();
    return c.json({ data: body });
  });

export default app;

挂载路由:在 app.ts 中注册

// apps/01mvp-web/src/server/app.ts
app.route("/my-route", myRoute);

访问测试:浏览器或 curl 访问 http://localhost:7001/api/my-route 即可

中间件

中间件(middleware):在请求到达你的业务代码之前,先做一些预处理——比如检查登录状态、限制请求频率等。

项目内置了三个全局中间件,在 app.ts 中按顺序注册:

中间件文件位置说明
错误处理middleware/error-handler.ts统一错误响应格式
CORSmiddleware/cors.ts处理跨域请求
限流middleware/rate-limit.tsAPI 请求频率限制

需要登录保护的路由,加上认证中间件即可:

// apps/01mvp-web/src/server/routes/protected.ts
app.use("/*", authMiddleware);   // 需要登录
app.use("/*", adminMiddleware);  // 需要管理员权限

请求参数验证

使用 Zod(一个帮你校验数据类型是否正确的库)进行请求体验证:

// apps/01mvp-web/src/server/routes/events.ts
import { z } from "zod";
import { zValidator } from "@hono/zod-validator";

const schema = z.object({
  title: z.string().min(1),
  type: z.enum(["MEETUP", "HACKATHON"]),
});

app.post("/", zValidator("json", schema), async (c) => {
  const data = c.req.valid("json"); // data 已自动校验类型
});

OpenAPI 文档

项目自动生成 API 文档,开发时访问 http://localhost:7001/api/docs 即可在浏览器中查看和调试接口。

更多参考