#node.js #express
#node.js #экспресс
Вопрос:
Я новичок в Node.js и я столкнулся с проблемой. Я хочу отредактировать данные по имени пользователя, но ничего не происходит (данные остаются прежними, ошибок нет), когда я пытаюсь использовать postman. Пожалуйста, взгляните на мой код:
//Edit User
app.put("/user/:username", (req, res) => {
userData = userData.filter( user => {
if (user.username === req.params.username) {
const newUser = {
name: req.body.name ,
email: req.body.email ,
username: req.body.username,
password: req.body.password,
role: req.body.role,
}
userData.push(newUser)
}
return res.json(userData)
})
})
Кто-нибудь может мне помочь? Спасибо заранее!
Комментарии:
1. Вы пробовали консоль. войдите в if, чтобы проверить, выполняется ли if?
2. что такое
userData
? и почему вы пытаетесь изменить данные в том, что кажется какими-то операциями поиска (filter).3. @ChristianFritz
userData
— это массив объектов, в котором я храню данные. Хм, честно говоря, это то, что я думаю, как обновить данные? Потому что я пробовал без фильтра, а данные все еще не обновлены. И когда я меняю его наmap
operations, он добавляет новые данные, а не обновляет их.
Ответ №1:
Вы добавляете новые элементы в userData
снова и снова, используя .push()
. Вы хотите обновить существующий элемент массива:
if (user.username === req.params.username) {
user.name = req.body.email;
...
user.role = req.body.role;
}
Кроме того, в вашем маршруте есть ошибки. Если таковой username
не найден, вы можете захотеть вернуть HTTP 404. Вот как я бы написал ту же конечную точку REST:
//Edit User
app.put("/user/:username", (req, res) => {
const user = userData.find(u => u.username === req.param.username);
if (!user) return res.sendStatus(404); // assuming you are using Express.js
const { name, email, username, password, role } = req.body;
Object.assign(user, { name, email, username, password, role });
res.json(userData);
})