当前位置: 首页 > 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}`);
});

http://www.xdnf.cn/news/765487.html

相关文章:

  • 3516cv610在sample_aiisp上多创一路编码流,方法
  • 移动AI神器GPT Mobile:多模型自由切换
  • 2018ToG | 可逆的灰度图像
  • [蓝桥杯]最优包含
  • Linux --TCP协议实现简单的网络通信(中英翻译)
  • Linux 脚本文件编辑(vim)
  • dvwa4——File Inclusion
  • 面向对象进阶 | 深入探究 Java 静态成员与继承体系
  • 常见算法题目5 -常见的排序算法
  • 详解鸿蒙仓颉开发语言中的计时器
  • 审计- 3- 风险评估:内部控制
  • rabbitmq Topic交换机简介
  • 基于爬取的典籍数据重新设计前端界面
  • 【笔记】解决虚拟环境中找不到 chromedriver 的问题
  • 循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例
  • vscode code runner 使用python虚拟环境
  • CMake指令:string(字符串操作)
  • 前端框架性能综合评估报告:Solid.js、React、Vue与TypeDOM的多维度对比
  • 嵌入式鸿蒙开发环境搭建操作方法与实现
  • XML 编码:结构化数据的基石
  • AJAX对于XML和JSON的处理
  • 【算法设计与分析】实验——改写二分搜索算法,众数问题(算法分析:主要算法思路),有重复元素的排列问题,整数因子分解问题(算法实现:过程,分析,小结)
  • spring-cloud-alibaba-sentinel-gateway
  • pytorch基本运算-范数
  • 齐次变换矩阵与运动旋量的指数映射
  • 实验一:PyTorch基本操作实验
  • 前端八股之CSS
  • Javaweb学习——day1(JavaWeb 介绍与开发环境搭建)
  • StarRocks部署方案详解:从单机到分布式集群
  • 【DBA】MySQL经典250题,改自OCP英文题库中文版(2025完整版)