用 Oak 构建后端
使用 Oak 的 Application、Router 与 middleware 模型构建 Deno 服务
Oak 提供类似 Koa/Express 的 middleware 与 context 模型,适合已有中间件思维或需要较完整路由层的 Deno 后端。
deno add jsr:@oak/oak
import { Application } from "jsr:@oak/oak/application";
import { Router } from "jsr:@oak/oak/router";
const app = new Application();
const router = new Router();
router.get("/health", (ctx) => {
ctx.response.body = { ok: true };
});
app.use(async (ctx, next) => {
const started = performance.now();
await next();
ctx.response.headers.set("server-timing", `app;dur=${performance.now() - started}`);
});
app.use(router.routes());
app.use(router.allowedMethods());
await app.listen({ port: 8000 });
deno run --allow-net=0.0.0.0:8000 main.ts
中间件顺序就是控制流:错误处理、request ID 与安全 header 通常放在路由之前;404 映射和审计日志需要覆盖下游结果。数据库连接不要挂在每个请求里重复创建。
Oak 与 Hono
- 团队熟悉 Koa/Express、依赖 context mutation:Oak 更顺手。
- 同一套 API 要跨 Deno、Workers、Bun、Node 且强调小体积:优先评估 Hono。
- endpoint 很少:先用
Deno.serve。
官方参考:oak on JSR、Router API。