我正在尝试更新学生数据,但我无法更新它。在这段代码中,用户需要登录才能更新他/她的数据,用户的用户名是唯一的id,应该与学生的registrationNumber相匹配才能登录。
错误显示"duplicatekey: registrationNumber"但是我没有更新/修改registrationNumber。
router.get('/edit', isLoggedIn, async(req, res) => {
const registrationNumber = req.user.username
const student = await
Student.findOne({registrationNumber})
res.render('students/edit', { student })
})
router.put('/edit', isLoggedIn, async(req, res) => {
try {
const registrationNumber = req.user.username
const student = await
Student.findOneAndUpdate(registrationNumber, {...req.body})
res.redirect('/students/profile')
} catch(e) {
console.log(e)
}
})
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)
}
让我们检查body (console.log(body))以确保body.name或registrationNumber在数据库中不存在
与其在参数中传递用户名,不如尝试获取id,因为它似乎需要一个id。
router.put('/edit', isLoggedIn, async(req, res) => {
try {
const registrationNumber = req.params.edit
const student = await Student.findOneAndUpdate(registrationNumber, {...req.body})
res.redirect('/students/profile')
} catch(e) {
console.log(e)
}
})