检查数据库中的现有用户名 MEAN Stack

Checking database for existing username 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...');
            }
        }});

注意:浏览器中的控制台显示未定义数据库。

下面是我如何从 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);
            });
        });
});

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

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

现在,您有 解决方案 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 接受 param or query 和 return 一个布尔值(如果它在您的数据库中找到的话)。