Nodejs用户注册表单错误

时间:2017-03-08 10:14:36

标签: node.js mongodb

我正在使用MEAN堆栈进行虚拟学习项目。我现在遇到了问题。

index.controller.js

var User = require("../models/user");
controller.registerUser = function(req,res){    
User.find({
   'email' :  req.body.email
},  function(err, user){
    console.log(req.body.email);
    console.log(user);
    if(user){
        res.send("User already exist");            
    }else{
        var userModel = new User();
        userModel.email = req.body.email.toLowerCase();
        userModel.password = userModel.generateHash(req.body.password);                
        userModel.save(function(err, data) {
            if (err) {
                res.send("Error Occurred");
            } else {
                res.send("User Created");
            }
        });            
    }
});    

};
module.exports = controller;

每次我收到回复

  

"User already exist"

我的收藏中没有用户。我做错了什么?

2 个答案:

答案 0 :(得分:1)

find将返回一个Array用户,因此您已经创建条件,无论用户是否为[]

,例如

if (user.length > 0) {
   res.send("User already exist");
} else {
// do your stuffs
}

如果您要搜索一位用户,最好使用 findOne findOne 会返回单个文档而不是数组

如果用户不在数据库中,则返回null

<强> Use findOne instead of find

   var User = require("../models/user");
    controller.registerUser = function(req,res){    
    User.findOne({                
       'email' :  req.body.email
    },  function(err, user){
        console.log(req.body.email);
        console.log(user);
        if(user){
            res.send("User already exist");            
        }else{
            var userModel = new User();
            userModel.email = req.body.email.toLowerCase();
            userModel.password = userModel.generateHash(req.body.password);                
            userModel.save(function(err, data) {
                if (err) {
                    res.send("Error Occurred");
                } else {
                    res.send("User Created");
                }
            });            
        }
    });    

    };
    module.exports = controller;

答案 1 :(得分:0)

User.find在您的情况下返回一个数组为空数组[]

空数组上的

if返回true

如果你有方法User.findOne在搜索单个记录时使用它

var users = [];
if (users)
  console.log('Check1: User found');
else
  console.log('Check1: User not found');

// Use below code
if (users && users.length > 0)
  console.log('Check2: User found');
else
  console.log('Check2: User not found');