0Pricing
TypeScript Academy · 课时

带类型的中间件与错误处理器

编写类型安全的 Express 中间件函数

带类型的中间件与错误处理器 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。

欢迎

类型安全的 Express 中间件和错误处理程序可以避免请求处理管道中的常见错误。

中间件签名

中间件函数接收 req、res 和 next。请使用 express 中的 RequestHandler 类型。
import { RequestHandler } from 'express';
const authMiddleware: RequestHandler = (req, res, next) => {
  if (!req.headers.authorization) return res.status(401).json({});
  next();
};

NextFunction

导入 NextFunction,为第三个参数显式添加类型。
import { Request, Response, NextFunction } from 'express';
function logger(req: Request, res: Response, next: NextFunction): void {
  console.log(req.method, req.path);
  next();
}

错误处理程序签名

错误处理程序需要四个参数。TypeScript 通过 ErrorRequestHandler 类型强制执行这一要求。
import { ErrorRequestHandler } from 'express';
const errorHandler: ErrorRequestHandler = (err, req, res, next) => {
  res.status(err.status ?? 500).json({ message: err.message });
};

自定义错误类

定义带有状态码的带类型错误类。
class AppError extends Error {
  constructor(public message: string, public status: number = 500) {
    super(message);
  }
}

异步中间件包装器

包装异步中间件,将错误转发给 Express 错误处理程序。
function asyncHandler(fn: RequestHandler): RequestHandler {
  return (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next);
}

附加用户的身份验证中间件

令牌验证后,将经过身份验证的用户附加到请求上。
const authenticate: RequestHandler = async (req, res, next) => {
  const user = await verifyToken(req.headers.authorization);
  req.user = user; // requires module augmentation
  next();
};

使用 Zod 的验证中间件

在中间件中使用 Zod 解析请求体并缩小其类型范围。
function validate<T>(schema: ZodSchema<T>): RequestHandler {
  return (req, res, next) => {
    const result = schema.safeParse(req.body);
    if (!result.success) return res.status(400).json(result.error);
    req.body = result.data;
    next();
  };
}

路由级中间件

将带类型的中间件应用于特定路由。
router.use('/admin', authenticate, authorize('admin'));
router.get('/admin/users', asyncHandler(listUsers));

日志记录中间件

带类型的请求日志记录中间件。
const requestLogger: RequestHandler = (req, _res, next) => {
  console.log(`${req.method} ${req.path}`);
  next();
};

注册全局错误处理程序

将错误处理程序注册为中间件链中的最后一个中间件。
app.use(requestLogger);
app.use('/api', apiRouter);
app.use(errorHandler); // must be last

快速检查

Express 错误处理程序有多少个参数?

回顾

为 Express 中间件使用 RequestHandler、ErrorRequestHandler 和 NextFunction 类型。包装异步处理程序以转发错误。在中间件中使用 Zod 验证带类型的请求体。

常见问题解答

「带类型的中间件与错误处理器」课时是免费的吗?

是的 — 「带类型的中间件与错误处理器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。

「带类型的中间件与错误处理器」这节课中我会学到什么?

编写类型安全的 Express 中间件函数 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 TypeScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「带类型的中间件与错误处理器」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 TypeScript Academy 课中编写并运行代码吗?

能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Node.js 配置 TypeScript
  2. 为 Express 请求与响应添加类型
  3. 带类型的中间件与错误处理器
  4. 环境变量与配置类型
← 返回 TypeScript Academy