插件概述
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 自带以下插件:
- cors() - 设置 CORS HTTP 头
- csrf() - CSRF 保护
- csp() - 内容安全策略头
- trailingSlashes() - 强制尾部斜杠行为