繁体   English   中英

将 JSON object 添加到外部文件中的现有数组

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM