Node.js中如何创建嵌套JSON文件将选课数据归属到登录用户名下
问题根源
你现有代码中使用.操作符访问对象属性时,会把loggedPerson1当做固定的字符串键名,而非读取loggedPerson1变量存储的动态用户名,所以无法适配不同登录用户的存储需求。JavaScript中要使用变量作为对象的动态键,需要用[]方括号语法。
修改步骤
- 初始化存储对象时,使用动态键创建对应用户的选课数组,同时新增用户不存在时的兜底逻辑,避免首次登录用户调用push方法时报错
- 存储选课数据时,改用方括号语法访问对应用户的数组
修改后完整代码
const fs = require('fs') // 此处loggedPerson1为你已赋值的当前登录用户名字符串变量 let loggedPerson1 = '当前登录用户名' var exists = fs.existsSync('RegisteredCourses.json'); let objRegister = {} if(exists) { console.log("Loading"); var data = fs.readFileSync('RegisteredCourses.json', 'utf-8'); objRegister = JSON.parse(data); } else { console.log('created new ') // 改用方括号动态设置用户名作为键 objRegister[loggedPerson1] = []; } app.get('/RegisteredCourses',(req,res) =>{ // 可直接返回当前用户的选课数据 res.send(objRegister[loggedPerson1] || []) }) app.post('/RegisteredCourses',(req,res) =>{ var declaredCourse = { key: Date.now().toString(), CourseName : req.body.CourseName, CourseCode: req.body.CourseCode, StartDate:req.body.StartDate, EndDate:req.body.EndDate, Total_Fee: req.body.Fees, Delivery_Mode : req.body.Delivery_Mode, Description : req.body.Description, CourseType: req.body.CourseType } if(!declaredCourse.CourseName ){ reply ={ msg:"Please enter data correctly" } res.send(reply) } else{ // 新增兜底判断:如果当前用户没有对应的选课数组,先初始化 if(!objRegister[loggedPerson1]) { objRegister[loggedPerson1] = [] } // 改用方括号动态访问对应用户的选课数组 objRegister[loggedPerson1].push(declaredCourse) let data = JSON.stringify(objRegister, null, 2); fs.writeFile('RegisteredCourses.json',data,finished); console.log('RegisteredCourses updated') function finished(err){ reply = { status:"Success" } res.send(reply) console.log(reply) } } })
内容的提问来源于stack exchange,提问作者Agyapal Dhanoa
相关产品推荐
相关产品推荐

