0Pricing
TypeScript Academy · บทเรียน

มิดเดิลแวร์และตัวจัดการข้อผิดพลาดที่ระบุชนิด

เขียนฟังก์ชันมิดเดิลแวร์ของ Express อย่างปลอดภัยด้านชนิด

มิดเดิลแวร์และตัวจัดการข้อผิดพลาดที่ระบุชนิด เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

มิดเดิลแวร์และตัวจัดการข้อผิดพลาดของ Express ที่ปลอดภัยด้านชนิดช่วยป้องกันข้อบกพร่องทั่วไปในกระบวนการจัดการคำขอ

ลายเซ็นมิดเดิลแวร์

ฟังก์ชันมิดเดิลแวร์รับ req, res และ next ใช้ชนิด RequestHandler จาก express
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 มีพารามิเตอร์กี่รายการ

สรุปทบทวน

ใช้ชนิด RequestHandler, ErrorRequestHandler และ NextFunction สำหรับมิดเดิลแวร์ของ Express ห่อตัวจัดการแบบอะซิงโครนัสเพื่อส่งต่อข้อผิดพลาด ใช้ Zod ในมิดเดิลแวร์เพื่อตรวจสอบความถูกต้องของเนื้อหาคำขอโดยมีชนิดกำกับ

คำถามที่พบบ่อย

บทเรียน “มิดเดิลแวร์และตัวจัดการข้อผิดพลาดที่ระบุชนิด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “มิดเดิลแวร์และตัวจัดการข้อผิดพลาดที่ระบุชนิด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “มิดเดิลแวร์และตัวจัดการข้อผิดพลาดที่ระบุชนิด”

เขียนฟังก์ชันมิดเดิลแวร์ของ Express อย่างปลอดภัยด้านชนิด คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “มิดเดิลแวร์และตัวจัดการข้อผิดพลาดที่ระบุชนิด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า TypeScript กับ Node.js
  2. การระบุชนิดคำขอและการตอบกลับของ Express
  3. มิดเดิลแวร์และตัวจัดการข้อผิดพลาดที่ระบุชนิด
  4. ตัวแปรสภาพแวดล้อมและการระบุชนิดการกำหนดค่า
← กลับไปที่ TypeScript Academy