[英]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.