Не удается обновить данные учащихся

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