Использование исправления axious для редактирования профиля пользователя в файле JSON

#javascript #node.js #json #axios

#javascript #node.js #json #axios

Вопрос:

Я пытаюсь использовать Axious, чтобы дать пользователю возможность редактировать своего пользователя. Я использую файл JSON для хранения информации о пользователе.

Мне нужна помощь в написании моего API, чтобы он обновлял информацию о пользователе currentusers в файле JSON. Пользователь, который вошел в систему, сохраняется в локальном хранилище под CurrentUser.

Вот мой код в editUser.js

 function updateFunction() {
  let updateData = {
      username : localStorage.getItem('currentUser'),
      age: age.value,
      description: description.value,
      email: email.value,
      phone: phone.value,
      city: city.value,
      zip: zip.value,
      address: address.value,
      password : password.value, 
  }

   axios.patch("http://localhost:2500/editProfile/"  usernameCurent, updateData)
          .then(function(response){
          console.log(response);

          } 

      .then(() => window.location = "../view/userProfile.html"));          
 

}

Вот мой код в API.js

 app.patch('/editProfile/:username', (req, res) => {
    fs.readFile(dataPath, "utf8", (err, data) => {
        let parsedData = JSON.parse(data)
        const username = req.params["username"];
        console.log(data)
        parsedData[username] = req.body;
        fs.writeFile(dataPath, JSON.stringify(parsedData), () => {
            res.status(200).send('${username} updated');
        })
    })
})
 

Мне нужна помощь в написании API, чтобы он обновлял хранилище.JSON, в котором хранятся все пользователи.

Ответ №1:

Использование оператора распространения (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax ) позволит вам взять текущий и объединить его с вашими новыми данными, что-то вроде:

 
app.patch('/editProfile/:username', (req, res) => {
    fs.readFile(dataPath, "utf8", (err, data) => {
        let parsedData = JSON.parse(data)
        const username = req.params["username"];
        console.log(data)

        // this will use the current user, and only update those fields 
        // which are sent in the request body. If only one field is sent, 
        // only that field will be updated.
        const updatedUser = {...parsedData[username], ...req.body}         

        // we then set the parsedData to the new patched user.
        parsedData[username] = updatedUser 

        fs.writeFile(dataPath, JSON.stringify(parsedData), () => {
            res.status(200).send('${username} updated');
        })
    })
})