Skip to content
On this page

Express基础概念

Express是Node.js最流行的Web应用框架,它提供了一个简单而强大的API来构建Web和移动应用后端。理解Express的基础概念是掌握这个框架的关键。

Express应用对象

Express应用对象(app)代表一个Web应用,用于处理请求和定义路由。通过调用Express函数来创建:

javascript
const express = require('express');
const app = express();

主要方法

  • app.METHOD() - 定义HTTP请求处理程序
  • app.use() - 定义中间件
  • app.listen() - 启动服务器监听连接

请求对象(req)

请求对象(req)代表HTTP请求,包含请求的查询字符串、参数、body、HTTP头等信息。

常用属性

  • req.params - 路由参数
  • req.query - 查询参数
  • req.body - 请求体(需要中间件)
  • req.headers - HTTP头信息
  • req.method - HTTP方法
  • req.path - 请求路径
  • req.protocol - 请求协议
  • req.ip - 客户端IP地址

示例

javascript
app.get('/users/:id', (req, res) => {
  console.log(req.params.id); // 路由参数
  console.log(req.query.page); // 查询参数
  console.log(req.headers['user-agent']); // HTTP头
});

响应对象(res)

响应对象(res)表示HTTP响应,Express应用在处理请求时发送给客户端。

常用方法

  • res.send() - 发送响应
  • res.json() - 发送JSON响应
  • res.render() - 渲染视图模板
  • res.redirect() - 重定向请求
  • res.status() - 设置状态码
  • res.set() - 设置响应头

示例

javascript
app.get('/users/:id', (req, res) => {
  res
    .status(200)
    .set('Content-Type', 'application/json')
    .json({ id: req.params.id, name: 'User Name' });
});

路由(Routing)

路由定义了应用如何响应客户端请求,包括HTTP请求方法和URL路径。

路由结构

app.METHOD(PATH, HANDLER)
  • METHOD: HTTP请求方法(get, post, put, delete等)
  • PATH: 路径或端点
  • HANDLER: 处理请求的函数

示例

javascript
app.get('/', (req, res) => {
  res.send('GET request to homepage');
});

app.post('/users', (req, res) => {
  res.send('POST request to create user');
});

中间件(Middleware)

中间件函数能够访问请求对象(req)、响应对象(res)和next函数。

中间件类型

  1. 应用级中间件 - 使用app.use()或app.METHOD()
  2. 路由级中间件 - 类似应用级,但绑定到express.Router()实例
  3. 错误处理中间件 - 有4个参数的函数
  4. 内置中间件 - 如express.static()
  5. 第三方中间件 - 如body-parser、cookie-parser

中间件示例

javascript
// 简单日志中间件
const logger = (req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`);
  next();
};

app.use(logger);

// 路径特定中间件
app.use('/api', (req, res, next) => {
  console.log('API-specific middleware');
  next();
});

应用设置

使用app.set()设置应用配置:

javascript
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'ejs'); // 设置模板引擎
app.set('views', './views'); // 设置视图目录

HTTP方法

Express支持所有HTTP方法:

  • GET
  • POST
  • PUT
  • DELETE
  • PATCH
  • HEAD
  • OPTIONS

状态码

Express支持所有HTTP状态码,常用状态码:

  • 200 - OK
  • 201 - Created
  • 400 - Bad Request
  • 401 - Unauthorized
  • 403 - Forbidden
  • 404 - Not Found
  • 500 - Internal Server Error

模板引擎

Express支持多种模板引擎:

javascript
app.set('view engine', 'ejs'); // EJS
// app.set('view engine', 'pug'); // Pug
// app.set('view engine', 'hbs'); // Handlebars

错误处理

Express有内置错误处理机制:

javascript
// 错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

静态文件

使用内置中间件提供静态文件:

javascript
app.use(express.static('public'));

路由参数

路由参数用于捕获URL路径中指定的值:

javascript
app.get('/users/:userId/books/:bookId', (req, res) => {
  res.send(`User: ${req.params.userId}, Book: ${req.params.bookId}`);
});

查询参数

查询参数从URL查询字符串中获取:

javascript
// GET /search?q=express&category=framework
app.get('/search', (req, res) => {
  const query = req.query.q;
  const category = req.query.category;
  res.json({ query, category });
});

框架设计理念

Express遵循以下设计理念:

  1. 极简主义 - 核心功能简单,通过中间件扩展
  2. 中间件链 - 请求处理通过中间件链
  3. 路由灵活性 - 支持多种路由模式
  4. 非阻塞I/O - 基于Node.js的异步特性

这些基础概念为深入学习Express提供了坚实的基础,后续章节将详细介绍每个概念的实际应用。