#node.js #json #fs #in-memory #storing-data
#node.js #json #ФС #в памяти #хранение-данных
Вопрос:
я пытаюсь добавить новые данные в существующий файл json с именем db.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", } ], }
в настоящее время я работаю в nodejs, используя метод writeFileSync
() из fs
библиотеки. Мой index.js выглядит так :
server.post("/register", (req, res) =gt; { const {firstname, lastname, email, password,address, city} = req.body if(firstname amp;amp; lastname amp;amp; email amp;amp; password amp;amp; address amp;amp; 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" }) } })
Вам нужны некоторые предложения, пожалуйста. Ткс!!
Ответ №1:
Я сделал почти то же самое, что и вы давным-давно, вы должны извлечь содержимое файла в виде объекта JSON, изменить его, а затем записать его в строковом виде в свой файл.
У меня все еще есть фрагмент того, что я делал в прошлом:
const getUsers = () =gt; { let users = fs.readFileSync(path.join(__dirname, '../workspace/.users.json')); return JSON.parse(users); }; const setUsers = (users) =gt; { 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);
Комментарии:
1. Выглядят хорошо, но недостаточно для выполнения операции, которую я хочу. Таким образом, я нашел у себя решение, которое полностью решило мою проблему. вместо того, чтобы делать
userObject[0].firstname = "some value"
то, что в моих ощущениях переопределяет значение прецедента, я делаюuserObject.users.push({myObjectToAdd})