1、使用该组合的理由
一般的后台数据都需要保存到数据库中(常见的数据库就是MySQL和MongoDB),而数据库软件都是需要自己额外下载的,所以在没有数据库环境的情况下都使用JSON——server来配合MOCK模拟数据,但Json——server发送的是前端数据没有办法灵活的使用后端方法,所以我们可以配合nodejs来实现功能,如读取文件等功能。
所以为了方便~~(懒)~~,所以我决定使用Json文件和nodejs来配合制作一个伪后端,不用额外下载任何数据库软件。
2、 安装
此方法需要安装的只有nodejs,安装完成之后就可以开始操作了。
- 安装nodemon
npm i nodemon -g
这个工具主要可以实现热更行,不用每次更新js文件都重启服务了
- 初始化项目
npm init
可以通过自己不同的需求来更改项目名字、作者、版本号等信息
- 开始制作后端
创建一个js文件,可以命名为index.js
有一些模块是需要额外导入的,比如express模块,这个时候,我们就应该在命令行中使用npm i express导入
// 引入所需的模块
const express = require('express');
const fs = require('fs')
const app = express();
const port = 3000;
app.use(express.json()); // 解析请求体中的 JSON 数据
app.use(express.urlencoded({ extended: true })); // 解析请求体中的 URL-encoded 数据
// 创建简单的JSON数据(读取Json文件)
const rawData = fs.readFileSync('db.json');
const data = JSON.parse(rawData);
// 初始接口
app.get('/', (req, res) => {
res.json(data);
});
// 启动服务器
app.listen(port, () => {
console.log(`Server started on port ${port}`);
});
这个时候我们开启后端服务器(在命令行中输入nodemon index.js,或者修改package.json文件,在scripts中添加一个"start": “nodemon index.js”,在命令行中输入npm run start)就可以打开后端了,访问127.0.0.1:3000就可以访问到数据库了,这个时候我们为了防止跨域等问题再加入一个模块
const cors = require('cors')
app.use(cors());
3、使用
我的JSON文件是这样的(如果是复制的我的代码的话就要和index.js在同一文件夹)
{
"User": [
{
"id": 1,
"name": "管理员",
"role": "Admin"
},
{
"id": 2,
"name": "人事",
"role": "HR"
},
{
"id": 3,
"name": "库管",
"role": "WK"
},
{
"name": "test",
"role": "test",
"id": 4
}
]
}
如果数据比较多的话我们可以先使用变量将数据存储起来,比如我们现在有User数据库,我们就先将User存储一下
var User = data.User
- 查
我们要查某一个数据库的数据的话我们就可以直接返回某一个数据库的数据,如,我们要返回User数据库我们就可以直接res.send(User)
app.get('/User', (req, res) => {
res.send(User)
});
- 增
我们需要往User数据库中增加一个数据,我们先看数据库的结构,它是由Role(权限),Name(名字),id构成的,我们就只需要在前端填写权限和名字即可,主要是id需要自动生成,因为我们没有使用数据库软件所以自动增长就需要自己写一个id自增长的功能
// 先使用变量来存储当前数据库中最大的id
var maxUserId = Math.max(...User.map(User => User.id)); // 获取当前最大的用户 ID
// 数据增加接口
app.post('/UserAdd', (req, res) => {
// 在前端发过来的请求中获取到name和role的值
const { name,role } = req.body
// 将这些值和id融合在一起,成为一个对象
const newUser = { id: maxUserId + 1, name, role }
// 使用push方法,将对象追加到数据库中
User.push(newUser);
// 让UserId最大值增加,那样不管删除之类的就不会造成类似数组坍塌的问题
maxUserId++
// 我们在增加了以后数据是临时的,刷新后数据就会消失,所以我们需要将json文件进行保存
fs.writeFileSync('db.json', JSON.stringify({ User }));
// 发送成功消息
res.send({ message: 'User added successfully', code: 200 });
});
- 删
我们需要往User数据库中删除一个数据的时候我们只需要找到一个唯一值即可,而我们User数据库中的唯一值就是id字段,所以我们只需要传入要删除的id即可
app.delete('/UserDel/:id', (req, res) => {
const { id } = req.params;
const UserIndex = User.findIndex(User => User.id == id);
// 先按照id查找,查看是否存在id为X的用户
if (UserIndex === -1) {
// 如果不存在就返回404
res.send({ message: 'User not found', code: 404 });
} else {
// 如果能找到的话就进行删除
User.splice(UserIndex, 1);
fs.writeFileSync('db.json', JSON.stringify({ User }));
res.send({ message: 'User deleted successfully', code: 200 });
}
});