跳转至

Express.js 后端

一句话概述:Express 是 Node.js 最流行的 Web 框架,极简灵活,中间件机制强大,是学 Node.js 后端开发的起点,npm 周下载量超过 3000 万。

核心知识点

概念白话解释
Middleware中间件 = 请求处理链上的一环(像流水线上的工位)
Router路由器 = 把 URL 分模块管理
Request/Response请求/响应对象 = 封装了 HTTP 请求和响应的操作
Error Handler错误处理器 = 统一处理异常的中间件
Template Engine模板引擎 = 服务端渲染 HTML(EJS、Pug 等)

安装配置

mkdir myapp && cd myapp
npm init -y  # 初始化 npm 项目
npm install express  # 安装 Express
npm install cors helmet morgan  # 常用中间件

基本使用

// app.js
const express = require('express');  // 引入 Express
const cors = require('cors');  // 跨域中间件
const helmet = require('helmet');  // 安全头中间件
const morgan = require('morgan');  // 请求日志中间件

const app = express();

// 中间件
app.use(helmet());  // 安全 HTTP 头
app.use(cors());  // 允许跨域
app.use(morgan('dev'));  // 请求日志
app.use(express.json());  // 解析 JSON 请求体
app.use(express.urlencoded({ extended: true }));  // 解析 URL 编码

// 路由
app.get('/', (req, res) => {
  res.json({ message: 'Hello Express!' });  // 返回 JSON
});

app.get('/api/users/:id', (req, res) => {
  const { id } = req.params;  // 路径参数
  const { fields } = req.query;  // 查询参数
  res.json({ id, fields });
});

app.post('/api/users', (req, res) => {
  const { name, email } = req.body;  // 请求体
  if (!name || !email) {
    return res.status(400).json({ error: '缺少必填字段' });  // 400 错误
  }
  res.status(201).json({ id: 1, name, email });  // 201 创建成功
});

// 错误处理中间件(必须4个参数)
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: '服务器内部错误' });
});

app.listen(3000, () => console.log('Server running on port 3000'));

Router 模块化

// routes/users.js
const router = require('express').Router();

router.get('/', (req, res) => res.json([]));
router.get('/:id', (req, res) => res.json({ id: req.params.id }));
router.post('/', (req, res) => res.status(201).json(req.body));

module.exports = router;

// app.js 中使用
app.use('/api/users', require('./routes/users'));

认证中间件

const authMiddleware = (req, res, next) => {
  const token = req.headers.authorization?.split(' ')[1];  // 获取 Bearer Token
  if (!token) return res.status(401).json({ error: '未提供 Token' });
  try {
    const decoded = jwt.verify(token, SECRET);  // 验证 Token
    req.user = decoded;  // 附加用户信息到请求
    next();  // 继续下一个中间件
  } catch (err) {
    res.status(401).json({ error: 'Token 无效' });
  }
};

app.use('/api/protected', authMiddleware);  // 受保护的路由

常见报错

报错信息原因解决方法
Cannot GET /path路由未定义检查路由路径和方法
req.body is undefined未解析请求体添加 express.json() 中间件
EADDRINUSE端口被占用换端口或 kill 占用进程
ERR_HTTP_HEADERS_SENT重复发送响应检查是否多次调用 res.send()

速查表

// === 请求对象 ===
req.params.id       // 路径参数 /users/:id
req.query.page      // 查询参数 ?page=1
req.body            // 请求体
req.headers         // 请求头
req.method          // HTTP 方法
req.path            // 路径

// === 响应对象 ===
res.json(data)      // 返回 JSON
res.status(201)     // 设置状态码
res.send('text')    // 返回文本
res.redirect('/url') // 重定向
res.sendFile(path)  // 发送文件
res.set('key','val') // 设置响应头

// === 中间件顺序(重要) ===
// 1. 安全中间件(helmet)
// 2. 日志中间件(morgan)
// 3. 解析中间件(json/urlencoded)
// 4. 跨域中间件(cors)
// 5. 路由
// 6. 错误处理中间件(最后)

参考:Express 文档 | 更新于 2026 年