javascript - 将 JSON 对象添加到外部文件中的现有数组
问题描述
我正在尝试将新的 JSON 对象添加到外部文件中存在的数组中。我无法弄清楚如何做到这一点。
我使用仅更新数组的推送方法,但更改不会反映在外部文件中。
index.js
const expres=require('express');
const exphnd=require('express-handlebars');
const students=require('./students_data');
const fs=require('fs');
const uuid=require('uuid');
app=expres();
const port=5000;
app.engine('handlebars', exphnd({defaultLayout:'main'}));
app.set('view engine', 'handlebars');
app.use(expres.json());
app.use(expres.urlencoded({extended:false}));
app.get('/welcome',(req,res) => {
res.render('welcome');
});
app.get('/register',(req,res) => {
res.render('register');
});
app.post('/register',(req,res) => {
var name_reg = /^[A-Za-z]+$/;
var rol_reg= /^[0-9]*$/;
var marks_reg = /^[0-9]*$/;
if(req.body.name.match(name_reg) && (req.body.std ==='SE'|| req.body.std ==='TE' || req.body.std ==='BE') && req.body.rollno.match(rol_reg) && req.body.marks.match(marks_reg))
{
var newstud={
id:uuid.v4(),
name:req.body.name,
std:req.body.std,
rol_no:req.body.rollno,
marks:req.body.marks
};
students.push(newstud);
res.json(students);
}
else{
res.status(400).json({msg:'some data is wrong'});
}
});
app.get('/dashboard',(req,res) =>{
res.render('dashboard',{stud_arr:students});
console.log(students);
});
//create a server on port 5000
app.listen(5000,(req,res) => {
console.log('server is listening');
})
存在数组的外部文件
var students=[
{
id:1,
name:"bhagyashri",
std:"TE",
rol_no:45,
marks:66
},
{
id:2,
name:"zxc",
std:"SE",
rol_no:57,
marks:76
},
{
id:3,
name:"qwe",
std:"SE",
rol_no:57,
marks:76
}
];
module.exports=students;
注册新学生后的输出
server is listening
[
{ id: 1, name: 'bhagyashri', std: 'TE', rol_no: 45, marks: 66 },
{ id: 2, name: 'zxc', std: 'SE', rol_no: 57, marks: 76 },
{ id: 3, name: 'qwe', std: 'SE', rol_no: 57, marks: 76 },
{
id: '37776edf-9e0d-435c-a976-79b270d3bcc1',
name: 'purva',
std: 'TE',
rol_no: '34',
marks: '78'
}
]
但是,id为 37776edf-9e0d-435c-a976-79b270d3bcc1 的新记录不会添加到students.js。
谁能告诉我如何添加?
解决方案
您没有将数据保存到文件中。所以新记录永远不会出现在文件中。
我建议您使用fs.readFileSync()
方法而不是requre()
函数来加载您存储数据的文件。并将数据保存为纯 JSON 格式,如下所示:
students_data.json
[
{
"id": 1,
"name": "bhagyashri",
"std": "TE",
"rol_no": 45,
"marks": 66
},
{
"id": 2,
"name": "zxc",
"std": "SE",
"rol_no": 57,
"marks": 76
},
{
"id": 3,
"name": "qwe",
"std": "SE",
"rol_no": 57,
"marks": 76
}
]
因为fs.readFileSync()
方法将文件作为文本加载,所以需要使用JSON.parse()
方法将 JSON 文本转换为 javascript 对象。使用JSON.stringify()
方法将javascript对象转换为JSON文本并调用fs.writeFileSync()
方法将数据保存到文件中。
像这样的代码:
// load and parse data
var students = JSON.parse(fs.readFileSync('./students_data.json'));
// your codes
var newstud = {
// all the property
}
students.push(newstud);
// stringify and save data to file
fs.writeFileSync('./students_data.json', JSON.stringify(students));
传入的相对路径fs.readFileSync()
将相对于通过调用确定的当前工作目录进行解析process.cwd()
。这是不同的require()
还有一件事,如果你经常读写数据,最好使用数据库存储数据
推荐阅读
- java - 过滤可能为空的 SQL 行
- cassandra - cassandra where 子句,来自 udt 的一个字段
- swift - SwiftUI,如何翻译带有计时器样式的文本?
- php - WordPress:保存用户元以在保存时发布元
- sorting - For Each 循环并在找到特定名称时停止
- ruby - Ruby Sequel Gem 无法查找具有不同所有者的表
- ruby - 点(.)和双冒号(::)在访问类方法中的区别
- java - 为什么它不打印?链表
- php - 如何使用 base64_encode 使用单引号和双引号对密码进行编码
- constraints - 流口水中的算术运算符