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

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

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

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

javascript 复制代码
// 处理用户信息更新的路由

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" });

  }

});
相关推荐
释怀不想释怀19 小时前
硬盘基础了解知识
linux·运维·服务器
xuxie9919 小时前
N13 定时器GPT1、串口UART
运维·服务器·网络
开开心心就好19 小时前
模拟真人手写软件,支持随机调节
运维·服务器·windows·gitee·pdf·开源·excel
tobebetter952719 小时前
如何在windows系统通过ssh远程连接部署在云服务器的openclaw
服务器·windows·ssh
雾喔19 小时前
redis简单命令
数据库·redis·缓存
IT邦德19 小时前
Oracle 26ai 图数据库
数据库·oracle
代码探秘者19 小时前
【大模型应用】一篇弄懂Skill
数据结构·数据库·python·算法·spring
014-code19 小时前
如何使用 Redis实现一个简易消息队列?
数据库·redis·缓存·消息队列
talen_hx29619 小时前
screw-core生成数据库表结构文档简单例子
数据库·笔记·学习
Leo.yuan19 小时前
什么是主数据管理?主数据管理怎么做?
大数据·数据库