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