[英]adding JSON object to an existing array in external file
我正在尝试将新的 JSON object 添加到外部文件中存在的数组中。 我无法弄清楚如何做到这一点。
我使用仅更新数组的推送方法,但更改不会反映在外部文件中。
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;
output 新生注册后
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()
function 来加载您存储数据的文件。 并将数据保存为纯 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()
是不同的
还有一件事,如果你经常读写数据,最好使用数据库存储数据
您从文件const students = require('./students_data')
加载数据,但您的数组未链接到您的文件。 更新student
不会神奇地更新您的文件,您必须重新编写它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.