Express 知识点总结

1️⃣ Express 核心概念

概念 说明 示例

应用程序实例 express() 创建,用于配置和启动服务器 const app = express()

路由 定义端点(URL + HTTP 方法)的处理逻辑 app.get('/users', handler)

中间件 请求-响应周期中执行的函数,可修改 req/res 或结束请求 app.use(logger)

静态资源托管 将指定目录下的文件对外开放访问 app.use(express.static('public'))

请求对象 (req) 包含请求信息(参数、body、查询字符串等) req.query、req.params、req.body

响应对象 (res) 用于向客户端发送响应 res.send()、res.json()、res.status()

2️⃣ 路由详解

javascript 复制代码
// 基本路由
app.get('/users', (req, res) => { ... })
app.post('/users', (req, res) => { ... })
app.put('/users/:id', (req, res) => { ... })
app.delete('/users/:id', (req, res) => { ... })

// 路由参数
app.get('/users/:userId/books/:bookId', (req, res) => {
  const { userId, bookId } = req.params
})

// 查询字符串
app.get('/search', (req, res) => {
  const { q, page } = req.query  // /search?q=node&page=2
})

// 路由模块化(express.Router)
const userRouter = require('./routes/user')
app.use('/api/users', userRouter)

3️⃣ 中间件分类

类型 作用范围 语法 典型应用

全局中间件 所有请求 app.use(middleware) 日志、CORS、静态托管

局部中间件 特定路由 app.get('/path', mw1, mw2, handler) 特定接口的鉴权、验证

内置中间件 Express 自带 express.json()、express.urlencoded()、express.static() 解析 JSON、表单、托管静态文件

第三方中间件 通过 npm 安装 app.use(cors())、app.use(morgan()) 跨域、日志、压缩、限流

错误处理中间件 捕获错误 app.use((err, req, res, next) => {}) 统一错误响应、记录日志

中间件执行流程:

text

请求 → 全局中间件1 → 全局中间件2 → 路由匹配 → 局部中间件 → 路由处理 → 响应

↓ (报错)

错误处理中间件 → 响应

4️⃣ 你实现的自定义 Body 解析中间件(核心逻辑)

javascript 复制代码
function myBodyParser(req, res, next) {
  let data = ''
  req.on('data', chunk => {
    data += chunk
  })
  req.on('end', () => {
    const contentType = req.headers['content-type']
    if (contentType === 'application/json') {
      try {
        req.body = JSON.parse(data)   // 直接用 JSON.parse
      } catch (e) {
        req.body = {}
      }
    } else if (contentType === 'application/x-www-form-urlencoded') {
      req.body = querystring.parse(data)  // 或 new URLSearchParams(data)
    } else {
      req.body = data
    }
    next()
  })
}
app.use(myBodyParser)

关键点:

流式接收数据(data 事件可能多次触发)

根据 Content-Type 选择解析方式

解析结果挂载到 req.body

必须调用 next() 才能继续后续中间件/路由

5️⃣ 错误处理中间件(标准写法)

javascript 复制代码
// 放在所有路由之后,app.listen 之前
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).json({ 
    error: err.message || '服务器内部错误' 
  })
})

Express 框架

创建应用

  • const app = express()
  • app.listen(port, callback)

路由 (Routing)

  • HTTP 方法: get, post, put, delete
  • 路径: 字符串、字符串模式、正则
  • 参数
    • req.params (/users/:id)
    • req.query (?name=xxx)
  • 路由模块化
    • express.Router()
    • app.use('/prefix', router)

中间件 (Middleware)

  • 特点
    • 按顺序执行
    • 必须调用 next() 或 res.end()
  • 分类
    • 全局: app.use(fn)
    • 局部: app.get('/path', fn, handler)
    • 内置: express.json(), express.urlencoded(), express.static()
    • 第三方: cors, morgan, helmet
    • 错误处理: (err, req, res, next) => {}
  • 请求周期
    • 请求 → 中间件链 → 路由 → 响应
    • 错误 → 错误中间件

请求对象 (req)

javascript 复制代码
- req.params    // 路由参数
- req.query     // 查询字符串
- req.body      // 请求体 (需中间件)
- req.headers   // 请求头
- req.method    // HTTP 方法
- req.url       // 原始 URL

响应对象 (res)

javascript 复制代码
- res.send()           // 自动设置 Content-Type
- res.json()           // 返回 JSON
- res.status()         // 设置状态码
- res.sendFile()       // 发送文件
- res.redirect()       // 重定向
- res.download()       // 下载文件

静态资源托管

自定义中间件示例

  • 解析 body (监听 data/end)
  • 日志记录
  • 权限校验
相关推荐
kylinmin10 小时前
Node.js安装及环境配置超详细教程(以win11为例子)
node.js
阿奇__10 小时前
基于 Node.js 与智谱 AI 的 RAG 工程实践
人工智能·node.js
hacker_LeeFei11 小时前
前端辨识:npx、npm 、pnpm的区别
前端·npm·node.js
草明13 小时前
检查 node.js 项目中的漏洞
node.js·漏洞·audit
前端程序猿i13 小时前
PM2 使用详解:Node.js 项目后台运行、守护进程、日志与生产部署
node.js·pm2
m0_535817551 天前
从0到1上手Claude Code:Windows安装+88api配置全流程
windows·gpt·node.js·claude·claudecode·88api
大家的林语冰1 天前
Deno 2.8 正式发布,再次超越 Bun,史上最大的次版本升级诞生!
前端·javascript·node.js
hdsoft_huge1 天前
全开源数字孪生系统搭建方案:全套技术文档
vue.js·开源·node.js·echarts·webstorm
qiankui2 天前
nvm-windows 1.2.x无法安装 Node.js 14 或 16 等低版本的问题
node.js