我正在尝试允许用户编辑他们的个人资料,我目前有以下内容,这不起作用。
我喜欢的形式
<form action="/dashboard/users/edit/:id" method="put">
我有我的路线,所以
// users put
router.put('/dashboard/users/edit/:id', (req, res) => {
const user = {
schoolName: req.body.schoolName,
schoolAddress: req.body.schoolAddress,
schoolAddress2: req.body.schoolAddress2,
city: req.body.city,
zipCode: req.body.zipCode,
postalAddress: req.body.postalAddress,
postalCity: req.body.postalCity,
postalZipCode: req.body.postalZipCode,
telephone: req.body.telephone,
email: req.body.email,
password: req.body.password,
schoolType: req.body.schoolType,
schoolDistrict: req.body.schoolDistrict,
schoolRegion: req.body.schoolRegion,
curriculum: req.body.curriculum,
directorName: req.body.directorName,
directorTelephone: req.body.directorTelephone,
directorEmail: req.body.directorEmail,
schoolRepresentativeName: req.body.schoolRepresentativeName,
schoolRepresentativeTelephone: req.body.schoolRepresentativeTelephone,
schoolRepresentativeEmail: req.body.schoolRepresentativeEmail,
schoolRepresentativePosition: req.body.schoolRepresentativePosition,
schoolRepresentativeTShirt: req.body.schoolRepresentativeTShirt,
schoolRepresentativeTutorMentor: req.body.schoolRepresentativeTutorMentor
};
User.findByIdAndUpdate(req.params.id, user, function(err, raw){
if(err) {
res.send(err);
}
res.send(raw);
});
});
不过,我看不到要更新数据库。
感谢这里的任何帮助。
HTML 表单不支持 PUT 方法。正如此处所解释的,表单将作为 GET 请求发送。这就是为什么您的路由器处理程序永远不会执行的可能原因,因为您在发送 GET 请求时期望使用 PUT 方法。
为了解决此问题,您可以将路由器处理程序和表单方法都设置为 POST。
我不确定您是否具有完全相同的表单代码,或者为了简单起见,您将":id"作为操作属性的一部分放在其上,但以防万一我会做以下说明。
要记住的一点是,表单属性操作中的":id"不会是您尝试编辑的用户的实际 ID。它将始终命中/dashboard/users/edit/:id 而不是/dashboard/users/edit/4832(假设 4832 是真正的 userId(。
在这里,您需要在表单操作中包含实际 ID。例如: <form action="/dashboard/users/edit/4832" method="post">
.这样,当 Express 读取 req.params.id 时,它可以检索有效的 id,例如 4832 而不是":id">