文档中心
探索 DWeb 框架的无限可能,构建下一代高性能 Web 应用
创建自定义中间件
你可以创建自己的中间件来处理特定的业务逻辑。
基本结构
中间件是一个异步函数,接收 req、res 和 next 三个参数:
Code
import type { Middleware } from "@dreamer/dweb";
const myMiddleware: Middleware = async (req, res, next) => {
// 请求前处理
const start = Date.now();
// 调用下一个中间件
await next();
// 响应后处理
const duration = Date.now() - start;
res.setHeader("X-Response-Time", `${duration}ms`);
};
server.use(myMiddleware);中间件示例
响应时间中间件
Code
import type { Middleware } from "@dreamer/dweb";
const responseTime: Middleware = async (req, res, next) => {
const start = Date.now();
await next();
const duration = Date.now() - start;
res.setHeader("X-Response-Time", `${duration}ms`);
};
server.use(responseTime);请求 ID 中间件
Code
import type { Middleware } from "@dreamer/dweb";
import { randomUUID } from "@std/uuid";
const requestId: Middleware = async (req, res, next) => {
const id = randomUUID();
res.setHeader("X-Request-ID", id);
// 将 ID 附加到请求对象(如果需要)
(req as any).id = id;
await next();
};
server.use(requestId);条件中间件
Code
import type { Middleware } from "@dreamer/dweb";
const conditionalMiddleware = (condition: (req: Request) => boolean) => {
const middleware: Middleware = async (req, res, next) => {
if (condition(req)) {
// 执行特定逻辑
res.setHeader("X-Conditional", "matched");
}
await next();
};
return middleware;
};
// 只在特定路径应用
server.use(conditionalMiddleware((req) => {
return new URL(req.url).pathname.startsWith("/api");
}));错误处理
中间件可以捕获和处理错误:
Code
import type { Middleware } from "@dreamer/dweb";
const errorHandling: Middleware = async (req, res, next) => {
try {
await next();
} catch (error) {
console.error("中间件错误:", error);
res.status = 500;
res.json({ error: "Internal Server Error" });
}
};
server.use(errorHandling);提前返回
中间件可以在不调用 next() 的情况下提前返回响应:
Code
import type { Middleware } from "@dreamer/dweb";
const authCheck: Middleware = async (req, res, next) => {
const token = req.headers.get("Authorization");
if (!token) {
res.status = 401;
res.json({ error: "Unauthorized" });
return; // 不调用 next(),提前返回
}
await next();
};
server.use(authCheck);API 参考
Middleware 类型
Code
type Middleware = (
req: Request,
res: Response,
next: () => Promise<void>
) => Promise<void>;使用中间件
Code
server.use(middleware);