res.json发送旧数据

时间:2016-06-21 10:12:19

标签: angularjs json node.js express

您好我有一个问题,我无法用快递中的res.json解释。

这是我的/登录路线:

router.post('/login', function (req, res) {
    if (req.body.user) {
        var newUser = (typeof req.body.user === 'string') ? JSON.parse(req.body.user) : req.body.user;

        User.findOne({ email: newUser.email })
        .exec(function (err, user) {
            if (err) {
                return res.json({ error: true, data: err });
            } else {
                if (user !== undefined && user !== null) {

                    // Check password and generate a token if it exist
                    encrypt.checkHash(newUser.pwd, user.pwd, function (err, isCorrect) {
                        if (err) {
                            return res.json({ error: true, data: err });
                        } else {
                            if (isCorrect != false) {

                                // Generate token and send it
                                Token.generateToken({
                                    _id: user._id, email: user.email,
                                    iat: moment().valueOf(),
                                    exp: moment().add(30, 'minutes').valueOf(),
                                },
                                conf.secret,
                                {},
                                function (err, token) {
                                    if (err) {
                                        return res.json({ error: true, authenticate: false, data: err });
                                    } else {
                                        console.log('Logged');
                                        return res.json({
                                            error: false,
                                            token: token,
                                            authenticate: true,
                                            msg: 'user_connected',
                                        });
                                    }
                                });
                            } else {
                                console.log('Not logged');
                                return res.json({ error: true, authenticate: false, msg: 'user_undefined' });
                            }
                        }
                    });
                } else {
                    return res.json({ error: true, authenticate: false, msg: 'user_undefined' });
               }
           }
       });
   } else {
        return res.json({ error: true, authenticate: false, msg: 'user_empty' });
   }

});

这里是我向该路线发出请求的功能:

userRequest.auth = function (user) {
    console.log('AUTH userRequest ', user);
    $http({
        method: 'POST',
        url: url + '/auth/login',
        dataType: 'application/json',
        data: { user: user },
    }).then(function successCallback(response) {
        $log.warn('user request', response);
        deferred.resolve(response);
    }, function errorCallback(err) {

        deferred.reject(err);
    });

    return deferred.promise;
};

这里我的onClick函数启动了这个过程

var promise = userRequest.auth($scope.user);

promise.then(function (response) {
    var data = response.data;
    $log.info('Login RESPONSE ', response);

    if (data.error == false && data.authenticate == true) {
        $log.info('You are logged');
        $scope.notification = setAlertBoxOptions($scope.notification, true, 'alert-success', 'Vous êtes maintenant connecté');
     } else {
         $log.info('Wrong informations');
         $scope.notification = setAlertBoxOptions($scope.notification, true, 'alert-danger', 'Utilisateur inconnue');
     }
 }, function (reason) {

    $log.error(reason);
 });

我的函数的encrypt.checkHash回调工作和值isCorrect是检查我的密码哈希时的好处。如果密码正确,则记录“已记录”,如果密码不正确,则记录“未记录”。

我第一次在这条路线上发出请求时,它会通过res.json向我发送回复,我会得到预期的数据。

但是在第一次请求之后,我收到的数据总是我在第一次查询时收到的数据。

例如:我第一次发送正确的身份信息并将其返回给我

{error: false, token: token, authenticate: true, msg: 'user_connected'}

但之后,每当我尝试在该路由上进行另一次查询时,如果我的标识信息为false,我会继续收到此JSON对象事件。

我不是Nodejs的专家,我试图替换我的所有

res.json({...})

通过

return res.json({...})

停止执行但结果仍然相同。

你能和我分享你的智慧并帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我发现了为什么会发生这种情况,在我的angularJS工厂中,我只对$ q服务进行初始化,并在工厂的方法中使用它。像这样:

angular.module('myApp').factory(
    'userRequest',
    ['$log', '$q',
    function ($log, $q) {

        // Initialized wrongly
        var deferred = $q.defer();

        userRequest.auth = function (user) {

            console.log('AUTH userRequest ', user);
            $http({
                method: 'POST',
                url: url + '/auth/login',
                dataType: 'application/json',
                data: { user: user },
            }).then(function successCallback(response) {
                $log.warn('user request', response);
                deferred.resolve(response);
            }, function errorCallback(err) {

                deferred.reject(err);
            });

        return deferred.promise;
    };
}])

而不是:

angular.module('myApp').factory(
    'userRequest',
    ['$log', '$q',
    function ($log, $q) {

        userRequest.auth = function (user) {

            // Where to initialize it
            var deferred = $q.defer();

            console.log('AUTH userRequest ', user);
            $http({
                method: 'POST',
                url: url + '/auth/login',
                dataType: 'application/json',
                data: { user: user },
            }).then(function successCallback(response) {
                $log.warn('user request', response);
                deferred.resolve(response);
            }, function errorCallback(err) {

                deferred.reject(err);
            });

        return deferred.promise;
    };
}])