图书馆管理系统(四)基于jquery、ajax--完结篇

ops/2024/12/21 12:37:12/

任务3.6 后端代码编写

任务描述

这个部分主要想实现图书馆管理系统的后端,使用 Express 框架来处理 HTTP 请求,并将书籍数据存储在一个文本文件 books.txt 中。

任务实施

3.6.1 引入模块及创建 Express 应用
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const cors = require('cors');//防止端口不一样从而引发错误
  1. express:用于创建服务器和路由处理。
  2. body-parser:用于解析请求体。
  3. fs:Node.js 的文件系统模块,用于读写文件。
  4. cors:用于处理跨域请求。

接下来进行创建Express 应用,即下面代码使用Express框架进行编写。

const app = express();
const port = 5501; //端口名
3.6.2中间件设置及添加API

首先我们了解一下什么是中间件:中间件是处理请求和响应的函数,能够在请求到达路由处理器之前或之后对请求进行处理。设置中间件的方式通常是通过 app.use() 方法。

这里我们使用了

app.use(bodyParser.json());

body-parser 是一个 Express 的中间件,它用于解析请求体中的 JSON 数据

当客户端发送一个 JSON 数据的 POST 请求时,这个中间件会将请求体解析为 JavaScript 对象,并将其附加到 req.body 属性上,以便后续的处理函数可以访问。

app.use(express.static('public')); // 提供静态文件

express.static('public') 会将 public 目录下的所有文件作为静态资源,允许客户端直接访问这些文件。及我们用于存放html,css,js,等静态资源的那个文件夹。

app.use(cors()); // 允许所有来源

cors 是一个用于处理跨域资源共享(CORS)的中间件。

在构建 API 时,为了避免遇到前端和服务端不在同一源的情况,使用 cors() 中间件后,服务器就会允许来自任何源的 HTTP 请求,从而解决跨域问题。

添加书籍的API

app.post('/addBook', (req, res) => {fs.readFile('books.txt', 'utf8', (err, data) => {if (err) {return res.status(500).send('服务器错误');}let books = [];try {books = JSON.parse(data || '[]'); // 防止 books.txt 为空} catch (parseErr) {return res.status(500).send('数据解析错误');}books.push(req.body); // 将请求体中的数据添加到书籍数组fs.writeFile('books.txt', JSON.stringify(books, null, 2), (err) => { // 格式化写入if (err) {return res.status(500).send('服务器错误');}res.status(201).send('添加成功'); // 返回成功信息});});
});

当接收到 POST 请求时,读取 books.txt 文件,解析 JSON 数据,将请求体中的书籍信息添加到数组中,最后将更新后的数组写回到文件中。

注意:在这里难免会遇到很多的报错例如404500等等的错误因此我们在这三个API中都要进行打印报错信息,知道我们的错误点并进行错误调试。

编辑书籍的 API

app.put('/books/:index', (req, res) => {const index = parseInt(req.params.index, 10);fs.readFile('books.txt', 'utf8', (err, data) => {if (err) {return res.status(500).send('服务器错误');}let books = [];try {books = JSON.parse(data);} catch (parseErr) {return res.status(500).send('数据解析错误');}if (index < 0 || index >= books.length) {return res.status(404).send('书籍未找到');}books[index] = req.body;fs.writeFile('books.txt', JSON.stringify(books), (err) => {if (err) {return res.status(500).send('服务器错误');}res.send('编辑成功');});});
});

编辑图书中进行处理 PUT 请求,根据 URL 中的书籍索引值查找书籍,更新该书籍的信息并保存回文件。验证书籍索引是否有效。

获取索引使用的是:const index = parseInt(req.params.index, 10);(使用 parseInt 将路径参数 index 转换为整数,表示需要编辑的书籍索引。)

使用 fs.readFile() 函数读取 books.txt 文件,文件内容以 UTF-8 编码方式读取。读取完成后调用回调函数。然后定义一个空数组 books,用于存储从文件中读取到的书籍数据。再调用 JSON.parse() 将文件内容解析为 JavaScript 对象。

books[index] = req.body;

使用请求体中的数据更新 books 数组中对应索引的书籍信息。

最后将更新后的书籍数组写回到 books.txt 文件中,使用 JSON.stringify() 将数组转换为 JSON 字符串。

如果书籍信息成功更新并写入文件,返回“编辑成功”的消息。

删除书籍的 API

app.delete('/books/:index', (req, res) => {const index = parseInt(req.params.index, 10);fs.readFile('books.txt', 'utf8', (err, data) => {if (err) {return res.status(500).send('服务器错误');}let books = [];try {books = JSON.parse(data);} catch (parseErr) {return res.status(500).send('数据解析错误');}if (index < 0 || index >= books.length) {return res.status(404).send('书籍未找到');}books.splice(index, 1);fs.writeFile('books.txt', JSON.stringify(books), (err) => {if (err) {return res.status(500).send('服务器错误');}res.send('删除成功');});});
});

主要就是处理 DELETE 请求,读取书籍信息,查找索引,删除对应书籍并更新文件。

在url中:index 是一个动态路径参数,用于指定要删除的书籍的索引。

大致的步骤和编辑图书一样先获取索引、读取 books.txt 文件、处理错误、初始化书籍数组、将文件内容解析为 JavaScript 对象。

最后使用books.splice(index, 1)使用 splice() 方法从 books 数组中删除指定索引的书籍。

然后写入更新后的书籍列表,将更新后的书籍数组写回到 books.txt 文件中,使用 JSON.stringify() 将数组转换为 JSON 字符串。返回成功相应。

3.6.3 启动服务器

这是在进行操作前必须完成的步骤,不然100%会报错。

app.listen(port, () => {console.log(`服务运行在 http://localhost:${port}`);
});

app.listen(port, ...)此方法告诉 Express 应用开始监听传入的网络请求。

port 是一个参数,指定了服务器将在哪个端口上运行。

启动服务器步骤:打开命令提示符,cd转到server.js所在的文件夹路径。再改路径后输入node server.js回车即可,将会返回服务器运行在…的结果,即代表运行成功,此时再进行图书管理的操作。

 ok至此该图书馆管理系统项目全部完成,希望能够帮助到大家,也希望编写项目顺利无报错,

该项目也有很多后续需要更新的功能,或需要优化完善的功能,例如借书还书不能光光写死,应该与后端连接起来,欢迎大家的激烈讨论!!!


http://www.ppmy.cn/ops/143758.html

相关文章

同源策略:为什么XMLHttpRequest不能跨域请求资源?

一.浏览器安全 浏览器安全可以分为三大块——Web页面安全、浏览器网络安全****和浏览器系统安全 假设&#xff0c;如果页面中没有安全策略的话&#xff0c;Web世界会是什么样子的呢&#xff1f; Web世界会是开放的&#xff0c;任何资源都可以接入其中&#xff0c;我们的网站可…

Docker镜像制作

目录 1. 镜像制作的原因和方式2. 快照方式制作镜像2.1 docker commit命令来制作镜像2.2 实战C HelloWorld 镜像制作 3. Dockerfile 制作镜像3.1 Dockerfile 是什么3.2 为什么需要 Dockerfile3.3 Dockerfile 指令3.3.1 指令清单3.3.2 FROM指令3.3.3 MAINTAINER指令3.3.4 LABEL指…

【WPF】把DockPanel的内容生成图像

要在WPF中将一个 DockPanel 的内容生成为图像并保存&#xff0c;可以按照与之前类似的步骤进行&#xff0c;但这次我们将专注于 DockPanel 控件而不是整个窗口。 DockPanel的使用 WPF&#xff08;Windows Presentation Foundation&#xff09;中的 DockPanel 是一种布局控件&…

Hive内部表和外部表的区别

Hive是基于Hadoop的数据仓库工具&#xff0c;hive本身并不存储数据&#xff0c;而是将表数据文件存储在hdfs中&#xff0c;hive能将此数据文件映射为一张表&#xff0c;并提供解析编译sql的功能&#xff0c;将用户提交的sql转换为mr job&#xff0c;在mapreduce引擎上对数据进行…

基于RK3588机器人控制器+3D视觉传感器的送餐机器人解决方案

送餐机器人 通过搭载3D视觉传感器信迈机器人控制器&#xff0c;送餐机器人可以在复杂的餐厅环境中灵活避障通行&#xff0c;极大地提升餐品配送效率&#xff0c;改善用户用餐体验&#xff0c;并显著降低店家经营成本。 高峰期送餐难&#xff0c;曾一直是送餐机器人的行业痛点。…

pip使用方法

1. 安装包&#xff1a; pip install &#xff1a;安装指定的 Python 包。 pip install &#xff1a;安装特定版本的 Python 包。 pip install -r requirements.txt&#xff1a;从文件中读取依赖列表并安装所有列出的包。 pip install --pre &#xff1a;允许安装预发布或开发版…

如何有效修复ffmpeg.dll错误:一站式解决方案指南

当您遇到提示“ffmpeg.dll文件丢失”的错误时&#xff0c;这可能导致相关的应用程序无法启动或运行异常。本文将详细介绍如何有效地解决ffmpeg.dll文件丢失的问题&#xff0c;确保您的应用程序能够恢复正常运行。 ffmpeg.dll是什么&#xff1f;有哪些功能&#xff1f; ffmpeg.…

力扣-图论-18【算法学习day.68】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…