【问题标题】:append data to an existing Json file in nodejs将数据附加到 nodejs 中的现有 Json 文件
【发布时间】:2021-11-30 19:14:13
【问题描述】:

我正在尝试在名为 db.json 的现有 json 文件中添加新数据,我使用该文件在本地存储数据,也就是 inMemory。所以我尝试了很多方法来实现这一点,但仍然没有按预期工作因为添加操作替换了现有数据。 例如我想要这样的东西:

{
  "users": [,
    {
      "email": "johnDoe@gmail.com",
      "password": "blabala",
      "firstname": "John",
      "lastname": "Doe",
      "address": "4 rue gay lussac",
      "city": "Paris",

    },
    {
      "email": "new email",
      "password": "new password",
      "firstname": "new firstname",
      "lastname": "new lastname",
      "address": "new address",
      "city": "new city",
    }
  ],
}

我目前正在使用来自fs 库的writeFileSync() 方法在nodejs 中工作。 我的 index.js 看起来像这样:

server.post("/register", (req, res) => {
    const {firstname, lastname, email, password,address, city} = req.body
    if(firstname && lastname && email && password && address && city) {
        try {
            fs.readFile("db.json")
            fs.writeFileSync(path.join(__dirname, "db.json"),JSON.stringify(req.body), {encoding: "utf-8"})
            res.status(201).send({
                message: "User created!"
           })
        } catch (error) {
            res.status(500).send({
                code: error.code,
                message: error.message
            })
        }
    }else{
        res.status(500).send({
            message: "Something wrong"
        })
    }
})

需要一些建议。谢谢!!

【问题讨论】:

    标签: node.js json fs in-memory storing-data


    【解决方案1】:

    我很久以前和你做了几乎一样的事情,你必须将文件的内容提取为 JSON 对象,修改它,然后将它字符串化写入你的文件中。

    我仍然对我过去所做的事情有所了解:

    const getUsers = () => {
        let users = fs.readFileSync(path.join(__dirname, '../workspace/.users.json'));
        return JSON.parse(users);
    };
    
    const setUsers = (users) => {
        let newUsersObject = JSON.stringify(users, null, 2);
        fs.writeFileSync(path.join(__dirname, '../workspace/.users.json'), newUsersObject);
    };
    

    因此,使用这两个函数,您可以执行以下操作:

    //retrieve users
    let userObject = getUsers();
    
    //edit the first user (example)
    userObject[0].firstname = "John";
    userObject[1].lastname = "Doe";
    
    //save the modified object
    setUsers(userObject);
    

    【讨论】:

    • 看起来不错但不足以实现我想要的操作。因此,我从自己那里找到了完全解决我的问题的解决方案。而不是做userObject[0].firstname = "some value",在我看来确实覆盖了先例值,我做userObject.users.push({myObjectToAdd})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多