You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB更新用户数据运行报错,正确的用户信息修改实现方法是什么?

现有代码错误点
  • 语法错误:渲染编辑页的路由末尾多了冗余的});,直接导致代码无法正常编译运行
  • 模型调用错误:查询用户数据错误使用了Post模型,应该使用对应存储用户集合的User模型
  • 变量引用错误:POST逻辑中查询到的用户文档赋值给了user变量,后续修改字段时调用了未定义的post变量,运行时会直接抛出引用异常
  • 路由拼接错误:更新成功后的重定向路径缺少分隔斜杠,拼接后会生成/interfacexxx这类不符合预期的路径
  • 安全缺陷:用户密码直接明文存入数据库,存在数据泄露风险,建议加密后再存储
修正后完整实现

1. 渲染用户编辑页路由

// 注意根据你的实际路由前缀调整路径,查询用户使用User模型
router.get('/edituser/:userId', function(err, user) {
  User.findById(req.params.userId).exec(function(err, user) {
    res.render("home/edituser", { user: user });
  });
});

2. 保存用户更新路由

router.post("/save" ,async function(req,res){
  try {
    // 先查询对应用户
    const user = await User.findById(req.body.userId);
    if (!user) {
      req.flash("error","用户不存在");
      return res.redirect("/edituser");
    }
    // 赋值字段,变量名和查询出的文档对象保持一致
    user.username = req.body.username;
    user.email = req.body.email;
    // 注意:生产环境请先对req.body.password做bcrypt加密再赋值
    user.password = req.body.password;
    // 保存更新
    const saveUser = await user.save();
    console.log("saveuser", saveUser);
    // 路径拼接添加斜杠,使用模板字符串写法更清晰
    res.redirect(`/interface/${req.body.userId}`);
  } catch(err) {
    req.flash("error","用户更新失败");
    return res.redirect("/edituser");
  }
});
简化实现参考

你也可以直接使用findByIdAndUpdate方法省去先查询再赋值的步骤,代码更简洁:

router.post("/save" ,async function(req,res){
  try {
    // 配置new: true返回更新后的数据,runValidators: true触发模型字段校验
    const updateUser = await User.findByIdAndUpdate(
      req.body.userId,
      {
        username: req.body.username,
        email: req.body.email,
        // 密码同上先做加密处理
        password: req.body.password
      },
      { new: true, runValidators: true }
    );
    if (!updateUser) {
      req.flash("error","用户不存在");
      return res.redirect("/edituser");
    }
    res.redirect(`/interface/${req.body.userId}`);
  } catch(err) {
    req.flash("error","用户更新失败");
    return res.redirect("/edituser");
  }
});

内容的提问来源于stack exchange,提问作者senyonjo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:54:04