Skip to content

练习 — Middleware · Validation · CORS

对应知识点:Middleware · Validation · CORS 对应文档:docs/phase-03-web/middleware-validation-cors.md 代码目录:workspace/phase-03/middleware/

前置条件:完成 net/http Handler 练习。


Level 1 — 基础

练习 1.1 · Logging 中间件

workspace/phase-03/middleware/ 创建项目:

要求

  • 函数 loggingMiddleware(next http.Handler) http.Handler
  • 记录:method、path、status、duration
  • 包装 /health 验证日志输出

练习 1.2 · 中间件链

要求

  • 实现 chain(h http.Handler, middlewares ...func(http.Handler) http.Handler) http.Handler
  • 链顺序:logging → recovery(panic recover)→ 实际 handler
  • recovery 返回 500 JSON 错误

练习 1.3 · CORS 基础

要求

  • corsMiddleware 设置:
    • Access-Control-Allow-Origin: http://localhost:5173(Vue dev)
    • Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
    • Access-Control-Allow-Headers: Content-Type, Authorization
  • OPTIONS 预检请求返回 204

Level 2 — 应用

练习 2.1 · 请求体校验

要求

  • 定义 CreateDeviceRequestid(必填)、name(必填)、deviceType(agv/sensor)
  • 函数 ValidateCreateDevice(req CreateDeviceRequest) error
  • 校验失败返回 400 + 字段级错误信息

练习 2.2 · Query 参数校验

要求

  • GET /api/v1/devices?page=&pageSize=
  • page 默认 1,pageSize 默认 20,最大 100
  • 非法数字返回 400

练习 2.3 · 从 Vue 前端验证 CORS

要求

  • 用简单 HTML 或 Vue 项目从 localhost:5173 请求 Go API
  • 无 CORS 中间件时应报跨域错误
  • 加上中间件后请求成功
  • 在 README 记录浏览器 Network 面板观察要点

Level 3 — 综合

练习 3.1 · 认证中间件骨架

要求

  • authMiddleware(next http.Handler) http.Handler
  • 读取 Authorization: Bearer <token> header
  • token 为空返回 401;mock 合法 token 为 "dev-token"
  • 将 userId 写入 request context(context.WithValue

练习 3.2 · 组合到 Project 01

要求

  • 在 Phase 03 net/http 项目上叠加:logging、recovery、cors
  • /api/v1/devices POST 加校验
  • /api/v1/admin/* 路由加 authMiddleware(mock)

Level 4 — 项目实践

练习 4.1 · 数字孪生 API 中间件栈

workspace/phase-03/middleware/ 完成:

要求

  • 完整中间件栈:RequestID → Logging → Recovery → CORS → Auth(可选)
  • RequestID 写入响应 header X-Request-ID
  • 所有 4xx/5xx 日志包含 requestId
  • 提供 middleware/ 包,main 中一行链式挂载
  • Vue + Three.js 前端可从 dev server 调用 devices API
  • README:中间件顺序说明及原因

学习检查

  • [ ] 中间件的执行顺序如何影响行为?
  • [ ] CORS 预检请求何时触发?
  • [ ] 校验应放在 Handler 还是 Service 层?
  • [ ] context 传 userId 的注意事项?

提交方式

检查答案 — middleware validation cors 练习 X.X

学习导航

上一篇:net/http、Handler、Router · 对应知识文档 · 下一篇:Gin、JWT、API Design