Skip to content

插件概述

Fresh 可以通过 App 类或 Builder 类上提供的方法进行扩展。Fresh 本身的大部分功能都是使用这些 API 构建的。

自定义中间件

如果你需要修改请求、添加 HTTP 头或通过 ctx.state 向其他中间件传递额外数据,那么使用中间件是最佳选择。

ts
const addXFreshHeader = define.middleware(async (ctx) => {
  const res = await ctx.next();
  res.headers.set("X-Fresh", "served by Fresh");
  return res;
});

了解更多关于中间件的信息。

创建可复用的插件

由于 Fresh 插件本质上就是中间件和路由处理器,因此创建一个可复用的插件非常简单,只需导出一个返回中间件的函数即可:

ts
import type { MiddlewareFn } from "fresh";

export function requestId(): MiddlewareFn<{ requestId: string }> {
  return async (ctx) => {
    ctx.state.requestId = crypto.randomUUID();
    const res = await ctx.next();
    res.headers.set("X-Request-Id", ctx.state.requestId);
    return res;
  };
}
ts
import { App, staticFiles } from "fresh";
import { requestId } from "./plugins/request-id.ts";

const app = new App()
  .use(staticFiles())
  .use(requestId())
  .fsRoutes();

对于更复杂的插件,你可以组合多个中间件、添加路由,或使用Builder钩子进行构建时处理。

内置插件

Fresh 自带以下插件: