こんにちは私は、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({...})
を交換しようとしました。
あなたの知恵を私と分かち合い、このケースを解決してもらえますか?
何HTTPステータスコードは、あなたがこれを行う際に送信するサーバのですか? 200何か他の? – Paul
HTTPステータスコードは200ですが、データが更新されない理由はわかりましたが、なぜこの動作が行われたのか分かりません。メソッドが実行される順序です。 最初に実行されると、私のuserRequest.auth関数が最初に実行され、私はルートコードに行きます。 他のすべての時間は、ルートコードが最初に実行され、userRequest.authコードの後に実行されます。 なぜですか?私の約束履行は間違っていますか? –