当前位置: 首页 > news >正文

Node.js 中使用 Express 框架系统详细讲解

Node.js 中使用 Express 框架系统详细讲解


一、什么是 Express?

Express 是一个基于 Node.js 平台的极简、灵活且广泛使用的 Web 应用框架。它简化了构建 Web 服务器和 API 的流程,提供了一套丰富的功能,比如路由管理、中间件支持、模板引擎集成等。


二、环境准备

  1. 安装 Node.js(官网:https://nodejs.org/)

  2. 初始化项目

    mkdir my-express-app
    cd my-express-app
    npm init -y  # 快速生成 package.json
    
  3. 安装 Express

    npm install express
    

三、创建一个简单的 Express 服务器

创建一个文件 app.js,写入如下代码:

const express = require('express');
const app = express();// 监听端口
const PORT = 3000;// 路由:响应根路径 GET 请求
app.get('/', (req, res) => {res.send('Hello, Express!');
});// 启动服务器
app.listen(PORT, () => {console.log(`Server is running at http://localhost:${PORT}`);
});

运行命令:

node app.js

打开浏览器访问 http://localhost:3000/,你会看到页面显示 Hello, Express!


四、Express 核心概念讲解

1. 路由(Routing)

Express 通过路由匹配客户端请求的 URL 和 HTTP 方法,来决定如何响应。

  • app.get(path, handler) - 处理 GET 请求
  • app.post(path, handler) - 处理 POST 请求
  • app.put(path, handler) - 处理 PUT 请求
  • app.delete(path, handler) - 处理 DELETE 请求

示例:

app.get('/users', (req, res) => {res.send('获取用户列表');
});app.post('/users', (req, res) => {res.send('创建新用户');
});

2. 请求对象(req)和响应对象(res)

  • req 包含请求相关信息,比如 URL 参数、请求体、查询字符串等
  • res 用来构建响应,常用方法有:
    • res.send()
    • res.json()
    • res.status()
    • res.redirect()

五、中间件(Middleware)

Express 的中间件本质是一个函数,接收三个参数 (req, res, next),用于处理请求和响应的过程。中间件可以执行代码、修改请求对象、响应对象,或者结束请求-响应循环。

内置中间件示例

// 解析 JSON 请求体
app.use(express.json());// 解析 URL-encoded 请求体
app.use(express.urlencoded({ extended: true }));

自定义中间件示例

app.use((req, res, next) => {console.log(`${req.method} ${req.url} 时间: ${new Date().toISOString()}`);next(); // 调用 next 传递控制权
});

六、静态资源服务

使用内置的静态中间件 express.static() 来托管静态文件:

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

将静态文件(如 HTML、CSS、JS、图片)放入 public 文件夹,浏览器即可访问。


七、处理路由参数与查询参数

  • 路由参数示例:
app.get('/users/:id', (req, res) => {const userId = req.params.id;res.send(`用户ID: ${userId}`);
});
  • 查询参数示例:
app.get('/search', (req, res) => {const keyword = req.query.keyword;res.send(`搜索关键词是: ${keyword}`);
});

八、POST 请求与请求体

客户端通过 POST 发送 JSON 或表单数据时,需要解析请求体。

app.post('/login', (req, res) => {const { username, password } = req.body;res.send(`用户名:${username},密码:${password}`);
});

需要确保已启用 JSON 解析中间件:

app.use(express.json());

九、分离路由(Router)

当项目变大时,可以使用 express.Router() 来分离路由模块:

const express = require('express');
const router = express.Router();router.get('/list', (req, res) => {res.send('用户列表');
});router.post('/add', (req, res) => {res.send('新增用户');
});module.exports = router;

主应用中使用:

const userRouter = require('./routes/user');
app.use('/users', userRouter);

十、错误处理

定义错误处理中间件,必须有四个参数 (err, req, res, next)

app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('服务器错误');
});

十一、示例完整代码

const express = require('express');
const app = express();app.use(express.json());
app.use(express.urlencoded({ extended: true }));// 自定义日志中间件
app.use((req, res, next) => {console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);next();
});app.get('/', (req, res) => {res.send('Hello, Express!');
});app.get('/users/:id', (req, res) => {res.send(`用户ID: ${req.params.id}`);
});app.post('/login', (req, res) => {const { username, password } = req.body;res.send(`用户名: ${username}, 密码: ${password}`);
});// 错误处理中间件
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('服务器错误');
});const PORT = 3000;
app.listen(PORT, () => {console.log(`Server running at http://localhost:${PORT}`);
});

相关文章:

  • 有公网ip但外网访问不到怎么办?内网IP端口映射公网连接常见问题和原因
  • 制作个人Github学术主页
  • Redis持久化机制详解:RDB与AOF的深度剖析
  • 超声波测距三大算法实测对比
  • 【C#朗读文本DLL动态按钮控件组及按钮事件文本框拖放数据】2022-1-21
  • 【C语言入门级教学】assert断⾔和指针的使用
  • C++ - 标准库之 <sstream> ostringstream(ostringstream 概述、基本使用、清空内容、进阶使用)
  • Codeforces Round 1026 (Div. 2) C. Racing
  • 【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)
  • 树欲静而风不止,子欲养而亲不待
  • 打开一个新的Maven工程要做的事情
  • 基于 StarRocks + Iceberg,TRM Labs 构建 PB 级数据分析平台实践
  • R语言基础| 创建数据集
  • langGraph多Agent
  • PH热榜 | 2025-06-02
  • Spring Boot中保存前端上传的图片
  • React 18 生命周期详解与并发模式下的变化
  • openai-java
  • 企业级开发中的 maven-mvnd 应用实践
  • 免费的硬盘工具
  • 二手车网站源码下载/惠州网站排名提升
  • wordpress 信息分析/怎么关闭seo综合查询
  • asp.net+mvc+网站开发/营销型网站建设解决方案
  • 网站后台模板 仿cnzz/百度一下官网搜索引擎
  • 查询网站用什么做的/云优化seo
  • 织梦dede网站后台被挂黑链怎么办/淘宝推广哪种方式最好