-
Notifications
You must be signed in to change notification settings - Fork 0
/
student.js
151 lines (150 loc) · 4.52 KB
/
student.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/**
* 操作数据的文件模块,不关心业务,只处理数据
封装操作数据的API,方便于其他模块直接调用API即可操作数据
*/
const fs = require('fs')
// 保存学生信息
/**
* 保存新添加的学生信息到数据文件中
* 参数:
* 1. 新加的学生信息对象
* 2. callback回调函数,拿到异步操作的结果
* callback中的参数:
* 第一个参数err
* 成功是null, 失败是错误对象
* 第二个参数是结果
* 成功是数组,失败是undefined
*/
exports.save = (student, callback) => {
fs.readFile('./Db.json', 'utf8', (err, data) => {
if (err) {
return callback(err)
}
// 得到所有学生信息
let students = JSON.parse(data).students
// 为新加的学生添加一个唯一的id属性(原来最大id属性值基础上加1)
if (students.length === 0) {
// 如果原始数据文件中没有学生信息
student.id = 1
} else {
student.id = parseInt(students[students.length-1].id) + 1
}
students.push(student)
// 把新增加学生信息后的对象转换成字符串保存到数据文件中
let dataStr = JSON.stringify({
students: students
})
fs.writeFile('./Db.json', dataStr, err => {
if (err) {
// 如果写入失败,则把错误对象传递给它
return callback(err)
}
// 成功就没错,所以错误对象是 null
callback(null)
})
})
}
// 删除学生信息
/**
* 根据id值删除对应学生信息,这里需要一个参数id,
* callback回调函数接收两个参数:
* 第一个参数:err
* 成功时为null,失败时为错误对象
* 第二个参数就是根据id值得到的学生对象,失败时为undefined
*/
exports.deleteById = (id, callback) => {
fs.readFile('./Db.json', (err, data) => {
if (err) {
return callback(err)
}
let students = JSON.parse(data).students
let index = students.findIndex(item => {
return item.id == id
})
students.splice(index, 1)
// 重新调整剩余学生的id值,防止id值不连续
students.forEach((item, index) => {
item.id = index + 1
})
// 把所有学生信息转换为字符串,最后保存到数据文件中
let dataStr = JSON.stringify({students: students})
fs.writeFile('./Db.json', dataStr, err => {
if (err) {
return callback(err)
}
callback(null)
})
})
}
// 根据id值查找学生信息
/**
* 根据相应的id查询对应的学生信息,这里需要接收一个参数id值
* callback回调函数接收两个参数:
* 第一个参数:err
* 成功时为null,失败时为错误对象
* 第二个参数就是根据id值得到的学生对象,失败时为undefined
*/
exports.findById = (id, callback) => {
fs.readFile('./Db.json', 'utf8', (err, data) => {
if (err) {
return callback(err)
}
let students = JSON.parse(data).students
let ret = students.find(item => {
return item.id == id
})
callback(null, ret)
})
}
// 显示所有学生信息,利用回调函数得到异步操作的结果
/**
* callback中的参数:
* 第一个参数err
* 成功是null, 失败是错误对象
* 第二个参数是结果
* 成功是数组,失败是undefined
*/
exports.find = (callback) => {
fs.readFile('./Db.json', 'utf8', (err, data) => {
if (err) {
return callback(err)
}
// 成功则把获取的学生信息数组给到callback,注意第一个参数必须为‘null’
callback(null, JSON.parse(data).students)
})
}
// 根据对应id值,更新学生信息
/**
* 接收两个参数
* 1. 新修改的student信息
* 2. callback
* callbac需要两个参数
* 1. err
* 失败时为错误对象,成功时为null
* 2. 第二个参数就是根据id值得到的学生对象,失败时为undefined
*/
exports.updateById = (student, callback) => {
fs.readFile('./Db.json', 'utf8', (err, data) => {
if (err) {
return callback(err)
}
let students = JSON.parse(data).students
let result = students.find(item => {
return item.id == student.id
})
// 遍历新修改的学生信息对象,修改对应的学生信息
for (const key in student) {
result[key] = student[key]
}
// 把所有学生信息对象转换成字符串,然后保存到数据文件中
let dataStr = JSON.stringify({
students: students
})
fs.writeFile('./Db.json', dataStr, (err) => {
if (err) {
return callback(err)
}
callback(null)
})
})
}