第五课:Express框架与RESTful API设计:技术实践与探索
在使用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。
测试步骤
- 安装并启动Postman:从Postman官网下载并安装Postman应用程序,然后启动它。
- 创建新请求:点击Postman左上角的“New”按钮,选择“HTTP Request”来创建一个新的HTTP请求。
- 配置请求:
- 请求类型:选择GET、POST、PUT或DELETE等HTTP方法。
- URL:输入API的端点URL,如http://localhost:3000/users。
- 请求头:根据需要添加请求头,如Content-Type: application/json。
- 请求体:对于POST和PUT请求,在“Body”选项卡中选择“raw”和“JSON”格式,然后输入请求体数据。
- 发送请求:点击“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相关内容。
相关文章:

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

Linux 内核自定义协议族开发:从 “No buffer space available“ 错误到解决方案
引言 在 Linux 内核网络协议栈开发中,自定义协议族(Address Family, AF)是实现新型通信协议或扩展内核功能的关键步骤。然而,开发者常因对内核地址族管理机制理解不足,遇到如 insmod: No buffer space available 的错误。本文将以实际案例为基础,深入分析错误根源,并提…...

html-列表标签和表单标签
一、列表标签 表格是用来显示数据的,那么列表就是用来布局的 列表最大的特点就是整齐、整洁、有序,它作为布局会更加自由和方便。 根据使用情景不同,列表可以分为三大类:无序列表、有序列表和自定义列表。 1.无序列表(重…...

HTML-网页介绍
一、网页 1.什么是网页: 网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页是构成网站的基本元素…...

动态ip和静态ip适用于哪个场景?有何区别
在数字化浪潮席卷全球的今天,IP地址作为网络世界的“门牌号”,其重要性不言而喻。然而,面对动态IP与静态IP这两种截然不同的IP分配方式,许多用户往往感到困惑:它们究竟有何区别?又分别适用于哪些场景呢&…...

android13打基础: 保存用户免得下次重新登录逻辑
使用SP来做 创建LoginUser.kt // 登录用户需要Email data class LoginUser(val email: String,val password: String, )创建假数据FakeLoginUser.kt object FakeLoginUser {val fake_login_user_items arrayListOf(LoginUser(email "1690544550qq.com",password …...

Linux 4.4 内核源码的目录结构及其主要内容的介绍
以下是 Linux 4.4 内核源码的目录结构及其主要内容的介绍,适用于理解内核模块和驱动开发的基本框架: Linux 4.4 内核源码目录结构 目录作用与内容arch/平台架构相关代码每个子目录对应一种 CPU 架构(如 x86/、arm/、arm64/),包含硬件相关的启动逻辑、中断处理、内存管理等…...

手脑革命:拆解Manus AI如何用“执行智能体”重构生产力——中国团队突破硅谷未竟的技术深水区
第一章:Manus AI 的技术演进与行业背景 1.1 从工具到智能体:AI 技术的范式跃迁 人工智能的发展经历了从规则驱动(Rule-based)到统计学习(Statistical Learning),再到深度学习(Deep…...

Android 调用c++报错 exception of type std::bad_alloc: std::bad_alloc
一、报错信息 terminating with uncaught exception of type std::bad_alloc: std::bad_alloc 查了那部分报错c++代码 szGridSize因为文件太大,初始化溢出了 pEGM->pData = new float[szGridSize]; 解决办法 直接抛出异常,文件太大就失败吧 最后还增加一个日志输出,给…...

匿名GitHub链接使用教程(Anonymous GitHub)2025
Anonymous GitHub 1. 引言2. 准备3. 进入Anonymous GitHub官网4. 用GitHub登录匿名GitHub并授权5. 进入个人中心,然后点击• Anonymize Repo实例化6. 输入你的GitHub链接7. 填写匿名链接的基础信息8. 提交9. 实例化对应匿名GitHub链接10. 进入个人中心管理项目11. 查…...

【0基础跟AI学软考高项】成本管理
💰「成本管理」是什么? 一句话解释:像家庭装修控制预算,既要买得起好材料,又要避免超支吃泡面——成本管理就是精准算钱、合理花钱、动态盯钱,保证项目不破产! 🌋 真实案例…...

模型的原始输出为什么叫 logits
模型的原始输出为什么叫 logits flyfish 一、Logarithm(对数 log) 定义:对数是指数运算的逆运算,表示某个数在某个底数下的指数。 公式:若 b x a b^x a bxa,则 log b ( a ) x \log_b(a) x logb…...

[SAP MM] 查看物料主数据的物料类型
创建物料主数据时,必须为物料分配物料类型,如原材料或半成品 在标准系统中,物料类型ROH(原材料)的所有物料都要从外部采购,而类型为NLAG(非库存物料)的物料则可从外部采购也可在内部生产 ① 特殊物料类型:NLAG 该物料…...

风控模型算法面试题集结
特征处理 1. 特征工程的一般步骤什么?什么是特征迭代 特征工程一般包含: 数据获取,分析数据的可用性(覆盖率,准确率,获取容易程度)数据探索,分析数据业务含义,对特征有一个大致了解,同时进行数据质量校验,包含缺失值、异常值和一致性等;特征处理,包含数据处理和…...

PX4中的DroneCAN的实现库Libuavcan及基础功能示例
简介 Libuavcan是一个用C编写的可移植的跨平台库,对C标准库的依赖小。它可以由几乎任何符合标准的C编译器编译,并且可以在几乎任何体系结构/OS上使用。 在 DroneCAN 中,Libuavcan 有一个 DSDL 编译器,将 DSDL 文件转换为 hpp 头…...

Hot 3D 人体姿态估计 HPE Demo复现过程
视频讲解 Hot 3D 人体姿态估计 HPE Demo复现过程 标题:Hourglass Tokenizer for Efficient Transformer-Based 3D Human Pose Estimation论文地址:https://arxiv.org/abs/2311.12028代码地址:https://github.com/NationalGAILab/HoT 使用con…...

Linux操作系统6- 线程1(线程基础,调用接口,线程优缺点)
上篇文章:Linux操作系统5- 补充知识(可重入函数,volatile关键字,SIGCHLD信号)-CSDN博客 本篇Gitee仓库:myLerningCode/l27 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一.…...

每周一个网络安全相关工具——MetaSpLoit
一、Metasploit简介 Metasploit(MSF)是一款开源渗透测试框架,集成了漏洞利用、Payload生成、后渗透模块等功能,支持多种操作系统和硬件平台。其模块化设计(如exploits、auxiliary、payloads等)使其成为全球…...

MAC-禁止百度网盘自动升级更新
通过终端禁用更新服务(推荐) 此方法直接移除百度网盘的自动更新组件,无需修改系统文件。 步骤: 1.关闭百度网盘后台进程 按下 Command + Space → 输入「活动监视器」→ 搜索 BaiduNetdisk 或 UpdateAgent → 结束相关进程。 2.删除自动更新配置文件 打开终端…...

【C语言】自定义类型:结构体,联合,枚举(上)
前言:在C语言中除了我们经常使用的数据(int,float,double类型)等这些类型以外,还有一种类型就是自定义类型,它包括结构体,联合体,枚举类型。为什么要有这种自定义类型呢?假设我们想描…...

SQLiteStudio:一款免费跨平台的SQLite管理工具
SQLiteStudio 是一款专门用于管理和操作 SQLite 数据库的免费工具。它提供直观的图形化界面,简化了数据库的创建、编辑、查询和维护,适合数据库开发者和数据分析师使用。 功能特性 SQLiteStudio 提供的主要功能包括: 免费开源,可…...

Mysql配置文件My.cnf(my.ini)配置参数说明
一、my.cnf 配置文件路径:/etc/my.cnf,在调整了该文件内容后,需要重启mysql才可生效。 1、主要参数 basedir path # 使用给定目录作为根目录(安装目录)。 datadir path # 从给定目录读取数据库文件。 pid-file filename # 为mysq…...

聊天模型集成指南
文章目录 聊天模型集成指南Anthropic聊天模型集成PaLM2聊天模型PaLM2API的核心功能OpenAl聊天模型集成聊天模型集成指南 随着GPT-4等大语言模型的突破,聊天机器人已经不仅仅是简单的问答工具,它们现在广泛应用于客服、企业咨询、电子商务等多种场景,为用户提供准确、快速的反…...

搭建农产品管理可视化,助力农业智能化
利用图扑 HT 搭建农产品管理可视化平台,实现从生产到销售的全流程监控。平台通过物联网传感器实时采集土壤湿度、温度、光照等数据,支持智慧大棚的灌溉、施肥、病虫害防治等功能。同时,农产品调度中心大屏可展示市场交易数据、库存状态、物流…...

tee命令
tee 是一个在 Unix/Linux 系统中常用的命令,它用于读取标准输入(stdin),并将其内容同时输出到标准输出(stdout)和文件中。它常用于将命令的输出保存到文件的同时,也显示在终端屏幕上。 基本语法…...

国自然面上项目|基于海量多模态影像深度学习的肝癌智能诊断研究|基金申请·25-03-07
小罗碎碎念 今天和大家分享一个国自然面上项目,执行年限为2020.01~2023.12,直接费用为65万元。 该项目旨在利用多模态医学影像,通过深度学习技术,解决肝癌诊断中的难题,如影像的快速配准融合、海量特征筛选…...

「勾芡」和「淋明油」是炒菜收尾阶段提升菜品口感和观感的关键操作
你提到的「勾芡」和「淋明油」是炒菜收尾阶段提升菜品口感和观感的关键操作,背后涉及食品科学中的物理化学变化。以下从原理到实操的深度解析: 一、勾芡:淀粉的“精密控温游戏” 1. 科学原理 淀粉糊化(Gelatinization࿰…...

ROS云课三分钟-差动移动机器人导航报告如何撰写-及格边缘疯狂试探
提示词:基于如上所有案例并结合roslaunch teb_local_planner_tutorials robot_diff_drive_in_stage.launch和上面所有对话内容,设计一个差速移动机器人仿真实验,并完成报告的全文撰写。 差速移动机器人导航仿真实验报告 一、实验目的 验证 T…...

应用案例 | 精准控制,高效运行—宏集智能控制系统助力SCARA机器人极致性能
概述 随着工业4.0的深入推进,制造业对自动化和智能化的需求日益增长。传统生产线面临空间不足、效率低下、灵活性差等问题,尤其在现有工厂改造项目中,如何在有限空间内实现高效自动化成为一大挑战。 此次项目的客户需要在现有工厂基础上进行…...

蓝桥备赛(16)- 树
一、树的概念 1.1 树的定义 1)树型结构(一对多)是⼀类重要的非线性数据结构 2 )有⼀个特殊的结点,称为根结点,根结点没有前驱结点 3)除了根节点外 , 其余结点被分成 M(M…...