辛宝的玄酒清谈

我的数字花园 A Solo Place

技术选型 unjs 家族里的 HTTP 框架 H3

后记:这个最后没经常使用,目前基本上还是无脑使用 node hono 这个 Web 框架了,这样用起来最舒服,尤其是 AI Agent 已经足够托管 Coding 的任务,就标记了

npmjs https://www.npmjs.com/package/h3

2024 年 1 月,周下载 301k

迷你 http 框架,为高性能准备。github https://github.com/unjs/h3

同属于 unjs 家族,是 nitro 的基础,可以类比 express,引用透明,使用和 vue3 差不多,概念容易上手。

为什么叫 h3,可以理解为 http 简称 h3。类比 k8s/i18n 等简写叫法。

快速代码#

// npm i h3
import { createServer } from "node:http";
import { createApp, eventHandler, toNodeListener, createRouter } from "h3";

const app = createApp();
const router = createRouter()
  .get(
    "/",
    eventHandler(() => "Hello World!")
  )
  .get(
    "/hello/:name",
    eventHandler((event) => `Hello ${event.context.params.name}!`)
  );

app.use(router);

createServer(toNodeListener(app)).listen(process.env.PORT || 3000);

基础介绍#

感觉和 express 和 vue 很像,哈哈。

也内置了很多开箱即用的应用。

utilities 部分,内置了一些方法。

常见的,比如:

  • readBody(event) 查看 body 内容
  • getQuery
  • getRouterParams
  • getMethod
  • getRequestIP
  • 响应体相关的
    • send
    • setHeadersetHeaders
    • sendStream
    • getCookie

和 zod 和 typebox 结合很容易,文档 https://github.com/wobsoriano/h3-zod

直接安装 npm i zod h3-zod,细节看文档。

Helpers that throw error 400 when parsing fails:

import { zh } from 'h3-zod';
// Or
import { useSafeValidatedQuery, useSafeValidatedBody } from 'h3-zod';

export default defineEventHandler(async (event) => {
  const query = zh.useValidatedQuery(event, z.object({
    required: z.string()
  }))

  const body = await zh.useValidatedBody(event, z.object({
    optional: z.string().optional(),
    required: z.boolean()
  }))

  const params = await zh.useValidatedParams(event, {
    id: z.number()
  })
})

历史归档#

Nuxt 里就是这样,看起来是自动拼成的服务。也内置了很多开箱即用的应用。

Comments

Comments are disabled for now.