检查数据库是否存在现有用户名MEAN Stack

时间:2016-06-14 20:57:25

标签: javascript angularjs mongodb express mean-stack

我有一个简单的问题(对于比我更了解的人,那就是..)关于我的注册控制器代码。 当新用户在我的网站上注册时,我正在尝试检查数据库中的现有用户名。我将在下面提供代码。提前谢谢!

    app.controller('SignupController', function ($scope, $http, $window) {

        $scope.submitSignup = function () {
            var newUser = {
                username: $scope.username,
                password: $scope.password
            };

            if (newUser.username == db.users.username) {
                alert('Username is already taken.');
            }

            if ($scope.submitsignup.$valid) {
                $http.post('/users', newUser).then(function () {
                    $window.location.href = '/#';
                    alert('Your account has been created!');
                });
            }
            else {
                alert('You messed something up brotha...');
            }
        }});

注意:浏览器中的控制台表示未定义db。

以下是我在server.js文件中从数据库中获取用户的方法。

    app.get('/users', function (req, res, next) {
        db.collection('users', function (err, usersCollection) {
            usersCollection.find().toArray(function (err, users) {
                return res.json(users);
            });
        });
});

1 个答案:

答案 0 :(得分:0)

首先,我建议您研究使用Node模块passport来处理注册和登录。它非常有用。

在控制台方面,问题很简单 - 您无法访问db中正在使用的server.js变量。它没有在前端定义,所以它没有任何意义。

现在,您在app.get('/users')处有 解决方案,因为该代码会将所有用户的列表从数据库发送到前端。我不认为这是一个很好的做法,如果你有很多用户,很多信息都要发送。 如果您将支票放在http.get()请求中,则可以

$http.get('/users').then(function(result){
    if(result.users.find(newUser.username)){
        alert('Username is taken!');
    } else {
        //continue working
    }
}

这应该可行,但它非常效率低下。您应该更改app.get paramquery中的<div class="b-datalist__item__subj"> hello <span class="b-datalist__item__subj__snippet">hello world</span> </div> ,并在数据库中找到布尔值。