#node.js #mongodb #express #ejs
Вопрос:
Я пытаюсь обновить данные о студентах, но я не могу их обновить. В этом коде пользователю необходимо войти в систему, чтобы обновить свои данные, и имя пользователя-это уникальный идентификатор, который должен совпадать с номером регистрации студента для входа в систему.
Ошибка показывает «дубликат: номер регистрации», но я не обновляю/не изменяю номер регистрации.
router.get('/edit', isLoggedIn, async(req, res) =gt; { const registrationNumber = req.user.username const student = await Student.findOne({registrationNumber}) res.render('students/edit', { student }) }) router.put('/edit', isLoggedIn, async(req, res) =gt; { try { const registrationNumber = req.user.username const student = await Student.findOneAndUpdate(registrationNumber, {...req.body}) res.redirect('/students/profile') } catch(e) { console.log(e) } })
Ответ №1:
findOneAndUpdate
первый параметр-это объект ( например find
, или findOne
), поэтому вы должны предоставить объект вместо строки
try { const registrationNumber = req.user.username const student = await Student.findOneAndUpdate({ registrationNumber }, {...req.body}) res.redirect('/students/profile') } catch(e) { console.log(e) }
Позвольте проверить тело (console.log(тело)), чтобы убедиться body.name или номер регистрации не существует в базе данных
Ответ №2:
Вместо того, чтобы передавать имя пользователя в параметрах, попробуйте получить идентификатор, потому что кажется, что он ожидает идентификатор.
router.put('/edit', isLoggedIn, async(req, res) =gt; { try { const registrationNumber = req.params.edit const student = await Student.findOneAndUpdate(registrationNumber, {...req.body}) res.redirect('/students/profile') } catch(e) { console.log(e) } })