【Node.js从基础到高级运用】十一、构建RESTful API

news2024/11/15 4:53:24

在本篇博客中,我们将综合之前讨论的内容,深入探索如何使用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发送请求并检查响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python-sklearn-diabetes项目实战

目录 1 下载数据集和预处理 1.1 加载/下载数据集 1.2 数据可视化 1.3 数据清洗 1.4 特征工程 1.5 构建特征集和标签集 1.6 拆分训练集和测试集 2 训练模型 2.1 选择算法和确定模型 2.2 训练拟合模型 3 评估并优化模型性能 本文以糖尿病数据集diabetes为基础进行线性…

Spring Cloud Gateway如何实现熔断

Spring Cloud Gateway熔断集成 熔断应用: 金融市场中的熔断机制:在金融交易系统中,熔断机制(Circuit Breaker)是一种市场保护措施,旨在预防市场剧烈波动时可能导致的系统性风险。当某个基准指数&#xff08…

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤,下面我们来看一下Nacos集群的工作原理,一共有两部分:Leader节点选举及各节点数据同步。 1、Nacos集群中Leader节点是如何产生的 Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法&am…

【javaWeb】在webapp中手动发布一个应用

标题 🐲一、为什么要在webapp中手动发布一个应用🎉二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 🐲一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

Abaqus三维梯度泰森多边形插件:Voronoi FGM 3D(Mesh)- AbyssFish

插件介绍 Voronoi FGM 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus软件内生成梯度分布的三维泰森多边形长方体模型。插件可用于梯度功能材料(Functionally Gradient Materials)、梯度纳米金属材料、梯度金属结构等梯度晶体模型的建立。模型基于背景网格实现,通过单…

YOLO_项目环境配置

YOLOv5官方项目地址 https://github.com/ultralytics/yolov5 下载 5.0和1.0源码 5.0 master-Tags-v5.0 Code-Download.ZIP 切换到1.0下载 解压缩提取 打开V5.0 使用Pycharm打开V5.0的文件夹 环境配置 参考 http://t.csdnimg.cn/Zdfh2 http://t.csdnimg.cn/Nqkwr 然后在Pyc…

学习JAVA的二十二天(基础)

目录 网络编程 三要素: IP InetAddress类 端口号 协议 UDP协议 TCP协议 前言:学习JAVA的第二十一天(基础)-CSDN博客 网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 三要素:…

Qt篇——QChartView获取鼠标停留位置的数值

需求:鼠标停留在QChartView上时,想要计算停留位置的数值。 一开始的方法是想要通过鼠标移动事件计算鼠标在QChartView上的坐标,在换算成数值,后来发现QChartView中除了图表数据,还有坐标轴与坐标轴数值标签占了高度&a…

Python数据分析-Matplotlib1

一、折线图的绘制 1.数据分析流程 2.运用Matplot绘制折线图 #encodingutf-8 import random from matplotlib import pyplot as plt #绘图工具库 from matplotlib import font_manager #解决中文显示问题 from cProfile import label #设置字体方式 my_font font_manager.Fon…

个人简历主页搭建系列-02:github 仓库作为联系方式

这篇文章暂时没有开始正式搭建网站。首先是最重要的注意事项:隐私。 真实姓名如果大家自己不介意的话其实我觉得还好,现在在互联网上想扒个姓名挺简单的,而且很多人都实名上网hh(比如我的几位田径队学弟笑)。 电话&a…

怎样基于“用户”思维让内容营销更有效

当下互联网流量见顶,内容已经成为互联网竞争新的制高点,可以说在数字化驱动的新时代下,“内容为王”仍然是真理。然后信息泛滥的时代下,如何让内容营销脱颖而出呢?媒介盒子认为“用户思维”是关键,今天就和…

2024.3.14jsp

一、实验目的 1、安装配置JSP运行环境 2、设置web服务目录,修改TomCAT服务器的端口号、访问web服务目录下的jsp页面。 二、实验项目内容(实验题目) 1、编写两个简单的JSP页面;参考第一章上机实验1、2 (1&#xff09…

Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

Nacos是服务发现组件和配置服务器 作为服务发现注册组件Nacos Server 搭建Nacos Server 下载、启动 访问nacos,默认 用户/密码 nacos/nacos 将应用注册到nacos 加依赖 在SpringCloud子项目中,Feign是属于OpenFeign,Sentinel、Nacos是属于alibaba的&…

搭建个人智能家居 3 -第一个设备“点灯”

搭建个人智能家居 3 -第一个外设“点灯” 前言ESPHome点灯 HomeAssistant 前言 前面我们已经完成了搭建这个智能家居所需要的环境HomeAssistant和ESPHome,今天我们开始在这个智能家居中添加我们的第一个设备(一颗LED灯),如果环境…

Mysql---库表操作

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.Mysql数据库简介 MySQL是一种关系型数据库管理系统,是最流行的开源数据库之一。它是由瑞典MySQL AB公司开发的,后来被Sun Microsystems收购,之后又被Oracl…

数码管的动态显示(三)

1.原理 data_reg寄存,只寄存符号位和数据位不包含小数点位。 动态数码管每个显示1ms,所以计数到5*10^4-1 为了将sel和seg同步,把sel打了一拍。 6位都使用到了可以这么计算,6位都显示的是数据。或者最高位显示的是小数点&#xff…

微软远程桌面RD Client:连接与管理的新境界

微软远程桌面RD Client:连接与管理的新境界 在数字化日益深入的今天,远程工作与管理已成为许多企业和个人的首选。微软远程桌面RD Client作为一款功能强大的远程连接工具,凭借其出色的性能和便捷的操作,受到了广泛的关注和好评。…

C# EPPlus导出dataset----Excel2绘制图像

一、生成折线图方法 /// <summary> ///生成折线图 /// </summary> /// <param name="worksheet">sheet页数据 </param> /// <param name="colcount">总列数</param> /// &l…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法&#xff0c;其…

PGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS多路视频融…