javascript - 无法从模板获取数据并将其传递给 Controller ​​ Angularjs

标签 javascript angularjs mongodb express mongoose

我正在尝试进行用户身份验证,但我认为我的模板中有问题。当我用 postman 尝试时,它有效。首先,我对/users/authenticate 进行 API 调用并获取 token 。然后,在获取 token 后,我对/users/me 进行另一个 API 调用以验证它。成功,用户登录。

这是我的 Controller :

    .controller('homeCtrl', ['$rootScope', '$location', '$http', '$timeout', 'Auth', function ($rootScope, $location, $http, $timeout, Auth) {
    $rootScope.loadme = false;
    $rootScope.currentPa = $location.path();
    $rootScope.$on('$routeChangeStart', function () {
        if (Auth.isLoggedIn()) {
            console.log('Success: User is logged in');
            $rootScope.isLoggedIn = true;
            Auth.getUser()
                .then(function (data) {
                    $rootScope.username = data.data.username;
                    $rootScope.email = data.data.email;
                    $rootScope.loadme = true;
                });
        } else {
            $rootScope.isLoggedIn = false;
            $rootScope.username = '';
            $rootScope.loadme = true;
        }
    });


    $rootScope.doLogin = function (loginData) {
        $rootScope.loading = true;
        $rootScope.errorMsg = false;
        console.log("TEST LOGIN");

        Auth.doLogin($scope.loginData)
            .then(function (data) {
                console.log('logging in');
                if (data.data.success) {
                    console.log('fgsgsg');
                    $rootScope.loading = false;
                    $rootScope.successMsg = data.data.message + 'Redirecting...';
                    $timeout(function () {
                        console.log('12345');
                        $location.path('/#!/');
                        $rootScope.loginData = '';
                        $rootScope.successMsg = false;
                    }, 2000);
                } else {
                    console.log("no success");
                    $rootScope.loading = false;
                    $rootScope.errorMsg = data.data.message;
                }
            })
    };

这些是服务器路由和中间件:

//User Login Route
router.post('/authenticate', function (req, res) {
User.findOne({username: req.body.username})
    .select('username email password')
    .exec(function (err, user) {
        if (err) {
            throw err;
        }

        if (!user) {
            res.json({success: false, message: 'Could not authenticate 
user'});
        } else if (user) {
            if (req.body.password) {
                var validPassword = 
user.comparePassword(req.body.password);
            }
            else {
                res.status(200).json({success: false, message: 'Please 
provide password'})
            }
            if (!validPassword) {
                res.status(200).json({success: false, message: 'Could 
not authenticate password'});
            } else {
                var token = jwt.sign({username: user.username, email: 
user.email}, secret, {expiresIn: '24h'});
                res.status(200).json({success: true, message: 'User 
authenticated', token: token});
            }
        }
        console.log(user);
    });
});


 //Middleware for decoding tokens
router.use(function (req, res, next) {
var token = req.body.token || req.body.query || req.headers['x-access-
token'];

if (token) {
    jwt.verify(token, secret, function (err, decoded) {
        if (err) {
            res.json({success: false, message: 'Token Invalid'})
        } else {
            req.decoded = decoded;
            next();
        }
    });
} else {
    res.json({success: false, message: 'No token provided'});
}
});

router.post('/me', function (req, res) {
   res.send(req.decoded);
});

最后,这是模板:

    <div ng-controller="homeCtrl">
        <form ng-submit="doLogin(loginData)">
            <label>Username:</label>
            <input class="form-control" type="text" name="username" placeholder="please enter username"
                   ng-model="loginData.username">
            <br>
            <label>Email:</label>
            <input class="form-control" type="text" name="email" placeholder="please enter email"
                   ng-model="loginData.email">
            <br>
            <label>Password:</label>
            <input class="form-control" type="password" name="password" placeholder="please enter password"
                   ng-model="loginData.password">
            <br>
            <button class="btn btn-primary" type="submit" formmethod="post">Login</button>
        </form>

最佳答案

您不需要在 dologin 函数中传递 loginData。只需添加语句 $scope.loginData = {};到您的 Controller ,并在调用 doLogin() 时尝试在 doLogin() 中打印它,以查看数据是否记录到控制台。

关于javascript - 无法从模板获取数据并将其传递给 Controller ​​ Angularjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45165239/

相关文章:

javascript - express promise 链错误

java - MongoDB Java 驱动程序 : query where d>2, a ="ABC",b ="AA"

javascript - 使用 JavaScript 对单个数组的多个属性进行分组

angularjs - 如何检查 Angular $q promise 是否已解决

javascript - Ember 组件 sendAction() 不工作

javascript - 在 Angular UI-Grid 中交换数据,在外部更改数据集时新列不可见

javascript - Ion-View 不刷新(Angular UI-Router)

node.js - 子文档的地理空间查询

javascript - 检测窗口大小 onload 以及调整大小?

javascript - JavaScript 中的舍入问题