Данные, не отредактированные с помощью ввода в nodejs express

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