当前位置: 首页 > article >正文

Express + MongoDB 实现更新用户时用户名变化验证数据库是否存在,不变不验证

`User.findById()`:方法根据用户 ID 查找当前用户的信息,若用户不存在则返回 404 错误。

`User.findOne()`:方法检查新用户名是否已存在于数据库中。

`User.findByIdAndUpdate()`:方法更新用户信息,`new: true` 表示返回更新后的文档,`runValidators: true` 表示运行模型的验证器。

// 处理用户信息更新的路由

app.put("/users/:id", async (req, res) => {

  try {

    const userId = req.params.id;

    const updateData = req.body;

    // 验证是否为有效的 ObjectId

    if (!mongoose.Types.ObjectId.isValid(userId)) {

      return res.status(400).json({ message: "Invalid user ID" });

    }

    // 根据用户 ID 查找当前用户信息

    const currentUser = await User.findById(userId);

    if (!currentUser) {

      return res.status(404).json({ message: "User not found" });

    }

    // 检查用户名是否发生变化

    if (updateData.username && updateData.username !== currentUser.username) {

      // 验证新用户名是否已存在

      const existingUser = await User.findOne({

        username: updateData.username,

      });

      if (existingUser) {

        return res.status(409).json({ message: "Username already exists" });

      }

    }

    // 更新用户信息

    const updatedUser = await User.findByIdAndUpdate(userId, updateData, {

      new: true,

      runValidators: true,

    });

    res.json({ message: "User updated successfully", user: updatedUser });

  } catch (error) {

    console.error("Error updating user:", error);

    res.status(500).json({ error: "Internal Server Error" });

  }

});


http://www.kler.cn/a/563377.html

相关文章:

  • Linux:文本处理三剑客之sed命令用法详解
  • 【江科协-STM32】1. GPIO
  • WebGPU驱动的下一代Web图形引擎:突破浏览器计算性能瓶颈
  • Github 2025-02-24 开源项目周报 Top15
  • PostgreSQL vs MongoDB:优劣分析及适用场景
  • ubuntu系统 pycharm 卡死了,我用资源监视器将其杀死后,再打开就变成了直接卡死 且在点击Quit Windows无法关闭,只能再次杀死
  • vLLM专题(十三)-结构化输出(Structured Outputs)
  • 【苍穹外卖】问题笔记
  • IDEA 使用codeGPT+deepseek
  • 双重因子认证:守护数字安全的“双保险”
  • 数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全
  • HTML操作详解
  • 【C/C++】删除链表的倒数第 N 个结点(leetcode T19)
  • Maven Spring框架依赖包
  • 自动驾驶之BEVDet
  • 编写Redis开机自启动脚本
  • 小米电机CyberGear STM32HAL 使用指南
  • day7作业
  • DeepSeek推出DeepEP:首个开源EP通信库,让MoE模型训练与推理起飞!
  • python的Tkinter小程序上传Excel并下载Text