第五课:Express框架与RESTful API设计:技术实践与探索

embedded/2025/3/11 3:58:12/

在使用Node.js进行企业应用开发,常用的开发框架Express,其中的中间件、路由配置与参数解析、RESTful API核心技术尤为重要,本文将深入探讨它们在应用开发中的具体使用方法,最后通过Postman来对开发的接口进行测试。

一、Express中间件机制(Middleware)

Express中间件是Express框架的核心特性之一,它允许在请求和响应之间插入处理函数,以实现诸如日志记录、身份验证、数据解析等功能。中间件本质上是一个函数,具有访问请求对象(req)、响应对象(res)以及应用程序请求-响应周期中的下一个中间件函数(通常用next表示)的能力。

中间件的作用
  • 执行日志记录:记录每个请求的详细信息,如请求的URL、方法、时间等。
  • 身份验证和授权:身份验证和用户权限,确保只有经过授权的用户才能访问特定资源。
  • 错误处理:捕获并处理请求处理过程中发生的错误,避免应用程序崩溃。
  • 数据解析:解析请求体中的数据,如JSON、表单数据等。
中间件的使用

在Express中,可以通过app.use()方法注册中间件。中间件可以应用于整个应用程序,也可以应用于特定的路由。例如:

const express = require('express');
const app = express();/** 全局中间件,记录请求日志 */
app.use((req, res, next) => {console.log(`${req.method} ${req.url}`);next();
});/** 路由中间件,解析JSON请求体 */
app.use(express.json());/** 路由处理函数 */
app.post('/user', (req, res) => {console.log(req.body);res.send('User created');
});/** 启动服务器 */
app.listen(3000, () => {console.log('Server is running on port 3000');
});

二、路由配置与参数解析(req.params/req.body)

Express框架提供了灵活的路由配置机制,允许开发者根据不同的请求路径和HTTP方法来定义路由处理函数。在路由处理函数中,可以通过req.params和req.body来解析请求参数。

路由配置

在Express中,路由由请求的方法(如GET、POST)、URL路径和处理函数组成。例如:

/** 定义GET请求接口,获取动态路由的参数并返回数据给接口调用方 */
app.get('/users/:id', (req, res) => {const userId = req.params.id;res.send(`User ID: ${userId}`);
});/** 定义POST请求接口,获取请求体的参数并返回数据给接口调用方 */
app.post('/users', (req, res) => {const user = req.body;res.send(`User created: ${user.name}`);
});
参数解析
  • req.params:用于解析URL路径中的动态参数。例如,在/users/:id路由中,req.params.id将包含URL中的id值。
  • req.body:用于解析请求体中的数据。通常需要使用express.json()或express.urlencoded({ extended: true })中间件来解析JSON或URL编码的表单数据。

三、RESTful API设计规范

RESTful API是一种基于REST架构风格的网络服务接口,它使用HTTP协议的标准方法来实现资源的创建、读取、更新和删除操作(CRUD)。设计RESTful API时,需要遵循以下原则:

  • 使用HTTP方法:GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。
  • 使用名词而非动词:资源URL应使用名词来表示,而不是动词。例如,使用/users而不是/getUser。
  • 使用URI标识资源:每个资源应有一个唯一的URI。
  • 使用状态码表示操作结果:如200表示成功,404表示未找到资源,500表示服务器内部错误。
  • 返回JSON格式的数据:RESTful API通常返回JSON格式的数据,以便客户端解析和处理。
示例

下面是一个简单的RESTful API示例,包含用户资源的增删改查操作:

const express = require('express');
const app = express();
const users = [];
const crypto = require('crypto')/** 获取所有用户 */
app.get('/users', (req, res) => {res.json(users);
});/** 创建新用户 */
app.post('/users', (req, res) => {const newUser = req.body;/** 动态生成用户唯一编码 */const uuid = crypto.randomUUID()let nowUser = {...newUser, id: uuid}users.push(nowUser);res.status(201).json(nowUser);
});/** 获取单个用户 */
app.get('/users/:id', (req, res) => {const user = users.find(u => u.id === req.params.id);if (user) {res.json(user);} else {/** 设置请求状态:404 */res.status(404).send('用户信息不存在');}
});/** 更新用户信息 */
app.put('/users/:id', (req, res) => {const userIndex = users.findIndex(u => u.id === req.params.id);if (userIndex !== -1) {users[userIndex] = { ...users[userIndex], ...req.body };res.json(users[userIndex]);} else {res.status(404).send('用户信息不存在');}
});/** 删除用户 */
app.delete('/users/:id', (req, res) => {const userIndex = users.findIndex(u => u.id === req.params.id);if (userIndex !== -1) {users.splice(userIndex, 1);res.send('User deleted');} else {res.status(404).send('用户信息不存在');}
});/** 设置处理请求体数据为json数据对象,可以设置请求体的数据大小 */
app.use(express.json({limit: '50mb'}));app.listen(3000, () => {console.log('服务器运行在端口:3000');
});

四、使用Postman测试接口

Postman是一款强大的API测试工具,允许开发者发送HTTP请求并查看响应结果。使用Postman可以方便地测试Express框架构建的RESTful API。

测试步骤
  1. 安装并启动Postman:从Postman官网下载并安装Postman应用程序,然后启动它。
  2. 创建新请求:点击Postman左上角的“New”按钮,选择“HTTP Request”来创建一个新的HTTP请求。
  3. 配置请求:
    1. 请求类型:选择GET、POST、PUT或DELETE等HTTP方法。
    2. URL:输入API的端点URL,如http://localhost:3000/users。
    3. 请求头:根据需要添加请求头,如Content-Type: application/json。
    4. 请求体:对于POST和PUT请求,在“Body”选项卡中选择“raw”和“JSON”格式,然后输入请求体数据。
  4. 发送请求:点击“Send”按钮发送请求,并在下方查看响应结果。
测试代码示例

以下是如何使用Postman测试上述RESTful API的示例:

  • 获取所有用户:
    • 请求类型:GET
    • URL:http://localhost:3000/users
    • 响应:JSON格式的用户列表
  • 创建新用户:
    • 请求类型:POST
    • URL:http://localhost:3000/users
    • 请求头:Content-Type: application/json
    • 请求体:{"id": 2, "name": "John Doe"}
    • 响应:JSON格式的新用户信息,状态码201
  • 获取单个用户:
    • 请求类型:GET
    • URL:http://localhost:3000/users/2
    • 响应:JSON格式的用户信息或404错误
  • 更新用户信息:
    • 请求类型:PUT
    • URL:http://localhost:3000/users/2
    • 请求头:Content-Type: application/json
    • 请求体:{"name": "Jane Doe"}
    • 响应:JSON格式的更新后的用户信息
  • 删除用户:
    • 请求类型:DELETE
    • URL:http://localhost:3000/users/2
    • 响应:文本“User deleted”或404错误

通过以上步骤和示例代码,开发者可以方便地使用Postman测试Express框架构建的RESTful API,确保API的功能和性能符合预期。

结论

通过本文,我们深入了解了Node.js的Express框架如何设置开发中间件、接口开发。掌握这些技术将帮助你在Node.js开发中更加高效地进行WebServer应用开发。

关注我!!🫵 持续为你带来Nodejs相关内容。


http://www.ppmy.cn/embedded/171660.html

相关文章

深度学习训练Camp:第R5周:天气预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 本周任务: 任务说明:该数据集提供了来自澳大利亚许多地点的大约 10 年的每日天气观测数据。你需要做的是根据这些数据对RainTomorrow进…

【蓝桥杯集训·每日一题2025】 AcWing 5539. 牛奶交换 python

AcWing 5539. 牛奶交换 Week 3 3月6日 题目描述 农夫约翰的 N N N 头奶牛排成一圈,使得对于 1 , 2 , … , N − 1 1,2,…,N−1 1,2,…,N−1 中的每个 i i i,奶牛 i i i 右边的奶牛是奶牛 i 1 i1 i1,而奶牛 N N N 右边的奶牛是奶牛 …

AF3 squeeze_features函数解读

AlphaFold3 data_transforms 模块的 squeeze_features 函数的作用去除 蛋白质特征张量中不必要的单维度(singleton dimensions)和重复维度,以使其适配 AlphaFold3 预期的输入格式。 源代码: def squeeze_features(protein):&qu…

MySQL 实战 4 种将数据同步到ES方案

文章目录 1. 前言2. 数据同步方案 2.1 同步双写2.2 异步双写2.3 定时更新2.4 基于 Binlog 实时同步 3. 数据迁移工具选型 3.1 Canal3.2 阿里云 DTS3.3 Databus3.4 Databus和Canal对比3.4 其它 4. 后记 上周听到公司新同事分享 MySQL 同步数据到 ES 的方案,发现很有…

数据结构(树)

数据结构(树) 树的基本概念 样子 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下…

《AI大模型专家之路》No.2:用三个模型洞察大模型NLP的基础能力

用三个模型洞察大模型NLP的基础能力 一、项目概述 在这个基于AI构建AI的思维探索项目中,我们实现了一个基于BERT的中文AI助手系统。该系统集成了文本分类、命名实体识别和知识库管理等功能,深入了解本项目可以让读者充分了解AI大模型训练和推理的基本原…

firewalld富规则配置黑名单

1. 屏蔽指定 IP 地址 firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.100 reject"参数说明 --permanent:将规则永久保存,重启后仍然生效。--add-rich-rule:添加一条富规则。rule family=ipv4:指定规则适用于 IPv4 地址。…

Meta 计划在 Llama 4 中引入改进的语音功能,接近双向自然对话

据英国《金融时报》3 月 7 日报道,Meta 首席产品官 Chris Cox 透露,Llama 4 将是一个 “全能模型”,语音功能将是原生的1。关于 Meta 计划在 Llama 4 中引入改进语音功能并接近双向自然对话,具体情况如下1: 功能特点 原…