【Node.js从基础到高级运用】十一、构建RESTful API
在本篇博客中,我们将综合之前讨论的内容,深入探索如何使用Node.js构建一个
RESTful API。我们将重点讨论设计合理的API端点,展示如何通过代码实现这些端点,并指导如何使用Postman测试我们的API,确保其按预期工作。
前提条件
- Node.js和npm已安装
- 基本的JavaScript知识
- 理解REST原则
- 安装Postman以测试API
步骤1:项目初始化与Express安装
首先,创建项目目录并初始化Node.js项目:
mkdir my-rest-api
cd my-rest-api
npm init -y
安装Express框架:
npm install express -D
步骤2:设计合理的API端点
合理设计API端点是创建RESTful服务的关键。端点应该清晰、直观且专注于资源,同时使用适当的HTTP方法表示操作。
实例端点设计:
获取所有书籍: GET /books
获取单本书籍: GET /books/:id
添加书籍: POST /books
更新书籍: PUT /books/:id
删除书籍: DELETE /books/:id
步骤3:实现API端点
在你的项目中创建一个index.js文件,并开始编写代码来实现这些API端点。让我们扩展我们的API,以支持CRUD操作。
定义一些假数据作为数据库
let books = [{ id: 1, title: 'JavaScript高级程序设计', author: 'Nicholas C. Zakas' },{ id: 2, title: 'Node.js实战', author: 'Mike Cantelon, Marc Harter, T.J. Holowaychuk, Nathan Rajlich' },// 添加更多书籍...
];
添加路由
// 获取所有书籍
app.get('/books', (req, res) => {res.json(books);
});// 通过ID获取单本书
app.get('/books/:id', (req, res) => {const book = books.find(b => b.id === parseInt(req.params.id));if (!book) res.status(404).send('找不到该书籍');res.json(book);
});// 添加一本书(示例未包括实际数据接收和验证逻辑)
app.post('/books', (req, res) => {// 添加书籍到books数组// 发送回新增书籍的JSON
});// 更新书籍(示例未包括实际数据更新逻辑)
app.put('/books/:id', (req, res) => {// 查找并更新书籍信息// 发送回更新后的书籍JSON
});// 删除书籍
app.delete('/books/:id', (req, res) => {books = books.filter(b => b.id !== parseInt(req.params.id));res.send('书籍已删除');
});
使用Body-Parser处理POST和PUT请求
要处理JSON格式的请求体数据,我们需要安装并使用body-parser中间件:
npm install body-parser -D
然后,在你的index.js文件中添加以下代码来引入并使用body-parser:
const bodyParser = require('body-parser');// 使用body-parser中间件
app.use(bodyParser.json());
这允许你通过req.body访问POST和PUT请求中的JSON数据。
完整示例
const express = require('express');
const bodyParser = require('body-parser');const app = express();
const port = 3000;let books = [{ id: 1, title: 'JavaScript高级程序设计', author: 'Nicholas C. Zakas' },{ id: 2, title: 'Node.js实战', author: 'Mike Cantelon, Marc Harter, T.J. Holowaychuk, Nathan Rajlich' },
];app.use(bodyParser.json());app.get('/books', (req, res) => {res.status(200).json(books);
});app.get('/books/:id', (req, res) => {const book = books.find(b => b.id === parseInt(req.params.id));if (!book) return res.status(404).send('书籍未找到');res.status(200).json(book);
});app.post('/books', (req, res) => {const book = {id: books.length + 1,title: req.body.title,author: req.body.author,};books.push(book);res.status(201).send(book);
});app.put('/books/:id', (req, res) => {let book = books.find(b => b.id === parseInt(req.params.id));if (!book) return res.status(404).send('书籍未找到');book.title = req.body.title || book.title;book.author = req.body.author || book.author;res.status(200).send(book);
});app.delete('/books/:id', (req, res) => {books = books.filter(b => b.id !== parseInt(req.params.id));res.status(204).send();
});app.listen(port, () => {console.log(`服务器运行在 http://localhost:${port}`);
});
步骤4:使用Postman测试API
测试是确保我们的API按预期工作的重要步骤。使用Postman,我们可以发送请求到我们的API,并查看响应。
1. 打开Postman并创建一个新的请求。
2. 根据需要测试的操作选择相应的HTTP方法,并输入端点URL。
例如,要测试获取所有书籍的端点,选择GET方法并输入http://localhost:3000/books。

3. 发送POST请求

查看结果:

4. 发送PUT请求

查看修改结果:

总结
本篇博客全面介绍了使用Node.js和Express框架构建RESTful API的过程。从项目的初始化开始,步骤包括了设计直观且遵循REST原则的API端点,实现CRUD操作,到使用Postman工具测试API确保其按预期工作。我们通过实例学习了如何创建、读取、更新、和删除资源(书籍)的端点,以及如何通过Postman发送请求并检查响应。
相关文章:
【Node.js从基础到高级运用】十一、构建RESTful API
在本篇博客中,我们将综合之前讨论的内容,深入探索如何使用Node.js构建一个RESTful API。我们将重点讨论设计合理的API端点,展示如何通过代码实现这些端点,并指导如何使用Postman测试我们的API,确保其按预期工作。 前提…...
Python和MATLAB数字信号波形和模型模拟
要点 Python和MATLAB实现以下波形和模型模拟 以给定采样率模拟正弦信号,生成给定参数的方波信号,生成给定参数隔离矩形脉冲,生成并绘制线性调频信号。快速傅里叶变换结果释义:复数离散傅里叶变换、频率仓和快速傅里叶变换移位&am…...
华为OD技术C卷“测试用例执行计划”Java解答
描述 示例 算法思路1 整体思路是,先读取特性的优先级和测试用例覆盖的特性列表,然后计算每个测试用例的优先级,并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序,输出测试用例的索引,即为执行顺序。…...
solana 入门 1
solana-co-learn Solana 开发学习笔记(一)——从 Hello World 出发 安装开发环境 windows下环境配置 wsl First start with installing WSL on your system. wsl --install wsl安装Ubuntu 列出可用的分发版 wsl.exe --list --online显示: 以下是可安装的有效…...
JavaEE之多线程(创建线程的五种写法)详解
😽博主CSDN主页: 小源_😽 🖋️个人专栏: JavaEE 😀努力追逐大佬们的步伐~ 目录 1. 前言 2. 操作系统"内核" 3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!) 3.1 继承 Thread, 重写 run 3. 2 实现 Runnabl…...
ChatGPT国内能用吗?中国用户怎么才能使用ChatGPT?
与ChatGPT类似的国内网站,他们都能提供和ChatGPT相似的能力,而且可以在国内直接使用。 点击直达方式 百科GPT官网:baikegpt.cn ChatGPT是基于GPT-3.5架构的语言模型的一个实例,由OpenAI开发。以下是ChatGPT的发展历史࿱…...
集群保持集群负载均衡和hash一致性
集群保持负载均衡和一致性哈希是在构建分布式系统时经常涉及的两个重要概念。 负载均衡: - 在集群中,负载均衡是指将传入的请求有效地分发到不同的服务器上,以确保每台服务器都能够处理适量的流量,避免某些服务器过载而造成性能问…...
吴恩达深度学习笔记:神经网络的编程基础2.9-2.14
目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第二周:神经网络的编程基础 (Basics of Neural Network programming)2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent) 第一门课ÿ…...
在C++项目中使用python脚本(四种)常见报错解决
上一期我们讲了如何在C中使用python脚本,这期讲讲过程中常会遇到的一些错误。 一、c代码未设置python路径 Py_SetPythonHome(L"D:\\anaconda3\\envs\\envpython3.7");这一句很重要,切记加上并且换成自己的路径 Py_SetPythonHome(L"D:\\a…...
微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】
qiankun官方文档:qiankun - qiankun 一、创建主应用: 这里以 vue 为主应用,vue版本:2.x // 全局安装vue脚手架 npm install -g vue/clivue create main-app 省略 vue 创建项目过程,若不会可以自行百度查阅教程 …...
nodejs切换淘宝源
1. 查看当前地址 npm config get registrynpm config get disturl2. 设置当前地址(设置为淘宝镜像) npm config set registry http://registry.npm.taobao.org/3. 设置当前地址(设置为默认地址) npm config set registry https…...
怎么避免电脑数据被拷贝?电脑如何禁用USB功能?
在无纸化办公的今天,很多重要数据都存放在电脑中。为了避免数据泄露,需要采用安全的方式保护电脑数据。那么,该如何避免电脑数据被拷贝呢?下面我们就来了解一下。 方法一:物理隔绝 物理隔绝是一种原始但有效的USB禁用…...
给电脑加硬件的办法 先找电脑支持的接口,再买相同接口的
需求:我硬盘太小,换或加一个大硬盘 结论:接口是NVMe PCIe 3.0 x4 1.找到硬盘型号 主硬盘 三星 MZALQ512HALU-000L2 (512 GB / 固态硬盘) 2.上官网查 或用bing查 非官方渠道信息,不确定。...
uniapp微信小程序_自定义交费逻辑编写
一、首先看最终效果 先说下整体逻辑,选中状态为淡紫色,点击哪个金额,充值页面上就显示多少金额 二、代码 <view class"addMoney"><view class"addMoneyTittle">充值金额</view><view class"selfaddmoney" :class"{…...
论文阅读——RingMo
RingMo: A Remote Sensing Foundation Model With Masked Image Modeling 与自然场景相比,RS图像存在以下困难。 1)分辨率和方位范围大:受遥感传感器的影响,图像具有多种空间分辨率。此外,与自然图像的实例通常由于重…...
Hadoop,Hive 数据预处理CR
记录一次大材小用,我在将.csv电影数据集 电影json数据 导入MySQL时,出现了报错: 很明显,意味着.csv中的数据有非utf8编码的, 尝试使用file查看了下.csv文件的编码格式: 如果不确定原始编码,可以先用file命令尝试检测一下: file -i input.csv该命令会显示文件的MIME类型…...
小程序开发——获取设备信息 API(三)
ty.device.getShareDeviceInfo 获取共享设备信息 需引入DeviceKit,且在>2.2.0版本才可使用 请求参数 Object object 属性类型默认值必填说明deviceIdstring是deviceId 设备 idcompletefunction否接口调用结束的回调函数(调用成功、失败都会执行&am…...
Vue2 + node.js项目
1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …...
如何使用IDE端通义灵码
如何使用IDE端通义灵码 第一步:安装IDE插件( VS Code 和 JetBrains 二选一) 如何下载安装VS Code :https://code.visualstudio.com 如何下载安装JetBrains:https://www.jetbrains.com/idea/download 第二步&#x…...
微服务分布式springcloud的体育场地预约系统演kdm1z
体育场馆设施预约系统是在实际应用和软件工程的开发原理之上,运用java语言以及Springcloud框架进行开发。首先要进行需求分析,分析出体育场馆设施预约系统的主要功能,然后设计了系统结构。整体设计包括系统的功能、系统总体结构、系统数据结构…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
