javascript - 当另一个用户已经注册了相同的电子邮件时,如何在 Put(更新)方法中进行电子邮件重复检查?

标签 javascript node.js mongodb mongoose sequelize.js

在 Node 应用程序的后端,当另一个用户已经注册了相同的电子邮件时,我想进行电子邮件检查。当我使用 POST 方法时,它已经工作得很好,但是当使用 PUT 进行更新时,当前例程将用户自己的电子邮件标识为重复项(因为他已经在数据库中注册),我不希望这样,它甚至没有意义,我希望在更新中,它不会被视为我正在更改的用户的电子邮件,而是检查是否有任何其他用户具有相同的电子邮件。

我尝试了以下代码:

chekEmailDuplicate = (req, res) => {
   User.findOne({//Tenta localizar algum usuário
            where: {//onde
                   id: !req.body.id,
                email: req.body.email
            }
        }).then(user => {
            if (user) {
                res.status(400).send("Fail -> Email is already in use!");
                return;
            }
}

正如我们在上面的代码中看到的,在:

id: !req.body.id

我尝试过类似考虑ID与被修改的用户不同的方法,但它不起作用,应用程序同样接受重复的电子邮件!没有 POST 是一个奇迹,但有了 PUT 就不会了。

使用 Node 或已经知道如何解决问题的人可以帮助我吗?

提前非常感谢您!

最佳答案

使用$ne

User.findOne({
  where: {
    id: {$ne: req.body.id}
    email: req.body.email
  }
}).then(user => {
  if (user) {
    res.status(400).send("Fail -> Email is already in use!");
    return;
  }
});

或者

User.findOne({_id: {$ne: req.body.id}, "email": req.body.email})

关于javascript - 当另一个用户已经注册了相同的电子邮件时,如何在 Put(更新)方法中进行电子邮件重复检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57272598/

相关文章:

javascript - gulp-typescript 正在编译所有 .ts 文件,而不仅仅是来自特定位置的文件

javascript - Promises .then(async()) 与 .then(function(){return async()})

node.js - node.js 中的 RPC 和消息队列

mongodb - 在主从 Mongo 数据库集中,如果您不小心写入了次级数据库,它会反射(reflect)在主数据库中吗?它会被路由到主数据库

angularjs - 过滤特定类型的所有项目(引用文档)

javascript - 将参数传递给基于类的 Node 模块

javascript - 如何使用 selenium webdriver 处理 onblur 事件

reactjs - 在 Ubuntu 20.04 中安装 mongoDB 失败

javascript - 我正在尝试制作 RLE 代码但没有成功

javascript - HowlerJS - 音频播放器 - 错误 401(未经授权)