저는 Angularjs에 익숙하지 않습니다.이 튜토리얼을 따라야합니다 : http://mherman.org/blog/2015/07/02/handling-user-authentication-with-the-mean-stack/#.WE70iubhCM8. 그러나 나는 $ q.defer()를 사용할 때 이해하지 않는다. 예를 들어, folllowing AngularJS와 코드를 사용하는 이유 $의 q.defer() :
function login(username, password) {
// create a new instance of deferred
var deferred = $q.defer();
// send a post request to the server
$http.post('/user/login',
{username: username, password: password})
// handle success
.success(function (data, status) {
if(status === 200 && data.status){
user = true;
deferred.resolve();
} else {
user = false;
deferred.reject();
}
})
// handle error
.error(function (data) {
user = false;
deferred.reject();
});
서버 측 코드는 다음과 같습니다
router.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.status(401).json({
err: info
});
}
req.logIn(user, function(err) {
if (err) {
return res.status(500).json({
err: 'Could not log in user'
});
}
res.status(200).json({
status: 'Login successful!'
});
});
})(req, res, next);
});
왜 다음 AngularJS와 코드에서 사용하지 :
function getUserStatus() {
return $http.get('/user/status')
// handle success
.success(function (data) {
if(data.status){
user = true;
} else {
user = false;
}
})
// handle error
.error(function (data) {
user = false;
});
}
서버 측 코드는 다음과 같습니다
router.get('/status', function(req, res) {
if (!req.isAuthenticated()) {
return res.status(200).json({
status: false
});
}
res.status(200).json({
status: true
});
});
거의 [** 절대 사용하지 마십시오 **] (http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it) ! 이 예제에서 배우지 말고 널리 알려진 반 패턴을 사용합니다. – Bergi