добавление данных в существующий файл Json в nodejs

#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})