【问题标题】:Check if username or email exist in mongodb atlas检查 mongodb atlas 中是否存在用户名或电子邮件
【发布时间】:2022-01-04 09:28:50
【问题描述】:

我是 MERN 的新手。如果电子邮件或姓名已经存在,我想打印 USER ALREADY EXIST。我使用了 .find 方法,但它不起作用。这是代码

    const { response } = require('express')
    const express = require('express')
    const router = express.Router()
    const mongoose = require('mongoose')
    const User = mongoose.model("User") 'defined in user.js'
    const bcrypt = require('bcryptjs')
    
    
    router.post('/signup',(req,res)=>{
        const {name,email,password} = req.body
        if(!email || !password || !name){
           return res.status(422).json({"error":"please add all the fields"}) //status 422 means server has understood the request but cant proess 
        }
    
       User.find({email : email, name : name}).then((savedUser)=>{
           if(savedUser){
               return res.status(422).json({error:"user already exist."})
           }
    
           bcrypt.hash(password,6).then(hashedpassword=>{
            const user = new User({
                email,    //is also written as "email" : email
                password:hashedpassword,
                name
            })
     
            user.save().then(user=>{
                res.json({message:"saved sucessfully"})
            }).catch(err=>{
                console.log(err)
            })  
           }) /
        
       }).catch(err=>{
           console.log(err)
       })
    
    }) 
    
    
    module.exports = router; 

【问题讨论】:

  • 你遇到了什么错误?
  • User.find({email : email, name : name}) 仅当文档中的姓名和电子邮件完全匹配时才会匹配。这是故意的吗?

标签: javascript mongodb express mongoose mern


【解决方案1】:

在 mongoose 中使用 .find() 会返回文档数组,即使只有一条记录,它也会在数组中。问题是当没有文档与您的查询匹配时,.find() 将返回一个空数组。制作savedUser = [],当你在这里签入if(savedUser)时,它总是返回true,导致 下面的块总是运行

return res.status(422).json({error:"user already exist."})

您可以通过以下方式解决此问题:

  1. if(savedUser.length)(检查数组中是否有项目)。
  2. 或使用.findOne 代替.find,这将返回与您查询匹配的第一个文档,否则返回null

我建议使用.findOne

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多