更新用户节点.js



我正在尝试允许用户编辑他们的个人资料,我目前有以下内容,这不起作用。

我喜欢的形式

<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">

最新更新