H3-轻量级Http服务器框架 助力原型设计

什么是 H3?

H3 作为一款依托 Web 标准搭建而成的 HTTP 服务器框架,其核心理念在于提供简洁明晰的 API 以及具备高度可组合性的工具集合。

无缝兼容任何 JavaScript 运行时,包括 Deno、Bun.Node.js、Workers 等。基于 Web 标准,并由 Srvx 提供支持,实现高性能与模块化的组合。

用途

在开展原型开发工作时,H3 所具备的轻量级与高效性特质,能够助力开发者在短时间内迅速搭建起服务器。借助这一优势,基本的业务逻辑得以顺畅实现,开发者能够在较短时间内对自身的创意和想法进行验证。

如此一来,产品的迭代进程得以显著加快,开发效率也得到了提升。

针对小型 Web 服务,诸如简易 API 服务、静态文件服务器等,H3 能够给予充分的支持,且不会造成资源的无端耗费,还能兼作静态文件服务器。

以小型博客网站为例,可运用 H3 来搭建后端服务,用以处理文章发布、查询等操作,

优势

1、轻量级与高性能:采用 tree - shakable 设计,核心体积小,只打包所需代码,减少体积提升性能。

2、基于 Web 标准:遵循 Web 标准,路由和事件处理基于 fetch 标准,与 Web 技术无缝融合。

3、简洁优雅的 API:提供简洁 API,几行代码即可创建服务器并定义路由,开发直观,减少冗余代码。

4、高度可组合性:支持中间件和插件系统,灵活组合功能,中间件可拦截请求、预处理、记录日志。

5、多运行时支持:兼容多种 JavaScript 运行时环境,如 Deno、Bun、Node.js、Workers 等。

特点

1、路由处理函数

开发者可以通过 app.get、app.post 等方法定义不同 HTTP 方法对应的路由处理函数。

app.get("/hello", () => "test GET method!")
   .post("/hello", () => "test POST method!")
   .any("/hello", () => "Any other method!");

支持获取 URL中的动态参数,实现灵活的路由匹配和处理。

app.get("/test/:name", (event) => {
  return `test param, ${event.context.params.name}!`;
});
中间件


2、生命周期: 传入请求、接受请求、调度请求、响应请求

在每个阶段,开发者都可以通过定义全局钩子来进行相应的处理,如 onRequest、onResponse、onError 等钩子。

3、中间件

H3 可以在请求处理的过程中进行拦截和干预。

开发者可以定义中间件来实现各种通用的功能,如日志记录身份验证请求数据转换等。

app.use(
  "/blog/**",
  (event, next) => {
    console.log("[alert] POST 请求访问 /blog 路径!");
  },
  {
    method: "POST",
    // match: (event) => event.req.method === "POST",
  },
);

4、事件处理机制

灵活地响应不同的请求事件

import { H3, defineHandler } from "h3";

const app = new H3();

const handler = defineHandler((event) => "Response");

app.get("/", handler);

除了常见的基于 HTTP 方法的路由事件处理外,还可以通过 defineHandler 方法定义通用的事件处理函数,并将其绑定到不同的路由上。


安装

npm安装

npm install h3@beta


创建服务

引入模块

import { H3, serve } from "h3"

创建 H3 实例

const app = new H3().get("/", (event) => "H3 server start!")

访问服务器根路径返回”H3 server start!“

启动服务器:将应用与服务器绑定,指定监听端口为8089

serve(app, { port: 8089 })

访问http://localhost:8089查看效果。

配合使用的插件

开发者可以通过插件来添加额外的功能模块,如缓存支持、数据库连接池、模板引擎等。极大地扩展了其功能的灵活性和可扩展性。

有两种插件注册方式:一种是在创建 H3 实例时通过配置项传入插件,另一种是通过实例的 register 方法动态注册插件。

import { H3 } from"h3";
import { logger } from"./logger.mjs";

// Using instance config
const app = new H3({
plugins: [logger()],
});

// Or register later
app.register(logger());

// ... rest of the code..
app.get("/**", () => "Hello, World!");

definePlugin 可以用来定义自定义插件。

import { definePlugin } from "h3";

const logger = definePlugin((h3, _options) => {
  if (h3.config.debug) {
    h3.use((req) => {
      console.log(`[${req.method}] ${req.url}`);
    });
  }
});


资料

H3 中文文档https://h3.zhcndoc.com/

想要学习和长期使用的小伙伴可以把它引用到之前文章里提到过的”自己搭建的api文档知识库“

里,可以方便的进行查询和ai问答,以便更快速的学习上手哦~

原文链接:,转发请注明来源!