2016-06-21 8 views
0

こんにちは私は、expressからres.jsonで実際には説明できない問題があります。ここで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); 
}); 

My機能のencrypt.checkHashコールバック仕事と値を開始isCorrectは、自分のパスワードハッシュをチェックするときの良いものです。パスワードが正しい場合は「Logged」、そうでない場合は「Not logged」を記録します。

私がこのルートで初めて要求したとき、res.jsonによる応答が返され、予想されるデータが得られました。

最初のリクエストの後、受信したデータは常に最初のクエリで受け取ったデータです。

例えば:私は正しい識別情報を送信し、それは私に

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

を返すが、その後、私はそのルート上で別のクエリを作成しようとするたびに、私は私の識別場合、このJSONオブジェクトのイベントを受信し続ける初めて情報は偽です。

私はNodejsの専門家ではないと私は、実行が、結果はまだ同じことを停止する

return res.json({...}) 

により、すべて私の

res.json({...}) 

を交換しようとしました。

あなたの知恵を私と分かち合い、このケースを解決してもらえますか?

+0

何HTTPステータスコードは、あなたがこれを行う際に送信するサーバのですか? 200何か他の? – Paul

+0

HTTPステータスコードは200ですが、データが更新されない理由はわかりましたが、なぜこの動作が行われたのか分かりません。メソッドが実行される順序です。 最初に実行されると、私のuserRequest.auth関数が最初に実行され、私はルートコードに行きます。 他のすべての時間は、ルートコードが最初に実行され、userRequest.authコードの後に​​実行されます。 なぜですか?私の約束履行は間違っていますか? –

答えて

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; 
    }; 
}]) 
関連する問題