gpt4 book ai didi

javascript - Node Js : How to read and update json file

转载 作者:行者123 更新时间:2023-12-05 03:32:20 26 4
gpt4 key购买 nike

您好,我是一名新编码员,但我在尝试将新用户 (req) 添加到假银行用户的 json 文件时遇到了麻烦。我对这些对象的类型以及如何从数据访问它们更加困惑。我将不胜感激任何建议。目前我只能添加新帐户,但它会替换文件中的其他用户。所以现在我试图在导入之前添加旧用户和新用户,但我不确定如何添加。我的主要困惑是如何访问和操作 fs.readfile 中的“数据”

app.post('/Account', (req, res,) => 
{
var queryParameter = req.query;
console.log(queryParameter.pin);
console.log(queryParameter.firstName);
console.log(queryParameter.lastName);
console.log(queryParameter.Balance);
console.log(queryParameter.email);
const tempAccount =
{
pin: Number(queryParameter.pin),
firstName: queryParameter.firstName.toString(),
lastName: queryParameter.lastName.toString(),
Balance: Number(queryParameter.Balance),
email: queryParameter.email.toString()
};

let content = [];
var data2 = tempAccount;//JSON.stringify(tempAccount, null, 2);*/
const fileName = "Routes/Users.json";
let content2 = [];

fs.readFile(fileName, 'utf8', function(err, data)
{
data = JSON.parse(data);
content2.push(JSON.stringify(data));
});

content.push(content2);
content.push(data2);

fs.writeFile(fileName, content, (err) =>
{
if (err) throw err;
console.log('Data written to file');
})
res.send(data);

});

Here is the json file:
{
"user": [
{
"pin": "1234",
"firstName": "Peter",
"lastName": "Parker",
"balance": "50",
"email": "spider@avenger.com"
},
{
"pin": "5678",
"firstName": "Steve",
"lastName": "Rogers",
"balance": "50",
"email": "captain@avenger.com"
},
{
"pin": "4321",
"firstName": "Tony",
"lastName": "Stark",
"balance": "1000",
"email": "iron@avenger.com"
}
]
}

最佳答案

这是关键问题:

let content2 = [];

fs.readFile(fileName, 'utf8', function(err, data)
{
data = JSON.parse(data);
content2.push(JSON.stringify(data));
});

content.push(content2);
content.push(data2);

JSON 作为一种可互换的数据格式很有用,但您不想在您的应用程序中尝试对其进行操作。只要您使用 JSON.stringify(),您的数据就会变成一个字符串。再次将其作为常规数据进行操作的唯一方法是使用 JSON.parse()

因此,在您的代码中,您正在解析数据,但转过来再次将其字符串化为 JSON,然后尝试将其推送到 content2。假设没有任何异步问题(有,但稍后会详细介绍),content2 将只是一个包含单个字符串的数组。

有两件事需要改变。首先,您需要等待加载文件中的数据,然后再进行其他操作。正如 @jarmod 在评论中提到的,您可以使用 readFile 的同步形式来执行此操作,但最好执行此异步操作,以免在我们等待文件时卡住您的应用程序。

未经测试的代码,但尝试这样的事情:

import * as fs from 'fs/promises';

const dataFile = 'data.json';

function async loadData() {
return JSON.parse(
await fs.readFile(dataFile)
);
}

function async saveData(data) {
await fs.writeFile(
dataFile,
JSON.stringify(data)
);
}

现在,当你想使用这些函数时,就更容易了:

app.post('/Account', async (req, res, next) => {
const data = await loadData();

// ... do other things here ...
// For example:
// data.user.push({ firstName: 'Brad' });

await saveData(data);
});

请注意,我将此 Express 回调/处理程序更改为 async

将来,如果你真的想使用基于本地文件的数据库,请查看 SQLite3。它非常快速且极其可靠。

关于javascript - Node Js : How to read and update json file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70501517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com