检查mongodb图集中是否存在用户名或电子邮件



我是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; 

在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

相关内容

最新更新