创建帐户后,用户应该登录并重定向到主页。但不知怎的,它不起作用。
因为它确实转到了主页,但用户仍然没有登录。但它确实转到了passport.use()函数。 (我在控制台上记录了这个)。这证明了这一点:
POST /api/myTheme/register 200 362 - 54.324 ms
POST /api/login 200 362 - 46.108 ms
下面你可以看到我的代码:
myApp.factory('MyTheme', function($http, $location) {
return {
register: function(user) {
return $http.post('/api/myTheme/register', {
email: user.email,
password: user.password,
confirmPassword: user.confirmPassword,
username: user.username,
name: user.name
}).then(function successCallback(response) {
$http.post('/api/login', {
email: user.email,
password: user.password
});
$location.path( "/" );
}, function errorCallback(response) {
});
}
};
});
可能的解决方案
当我改变路径时,帖子可能还没有完成。所以可能的解决方案是使用另一个.then()函数。在函数体内,我只有这行代码:
$location.path( "/" );
但我真的不知道如何放置.then()函数。
答案 0 :(得分:2)
只需链接Promise
s:
return {
register: function(user) {
return $http.post('/api/myTheme/register', { ... })
.then(function successCallback(response) {
return $http.post('/api/login', { ... }
)
.then(function successfulLogin(response) {
$location.path( "/" );
})
.catch(function errorCallback(response) { ... });
}
};
请注意,您可以在一个级别链接承诺,这使您的代码更具可读性,并允许您使用catch
来处理任何承诺引起的任何错误。
答案 1 :(得分:0)
当你注意到你在帖子完成之前改变路径时,我认为你走在了正确的轨道上。您只需将.then()
附加到帖子的末尾即可/ / api / login,就像发布到/ api / mytheme / register
喜欢这样
myApp.factory('MyTheme', function($http, $location) {
return {
register: function(user) {
return $http.post('/api/myTheme/register', {
email: user.email,
password: user.password,
confirmPassword: user.confirmPassword,
username: user.username,
name: user.name
}).then(function successCallback(response) {
$http.post('/api/login', {
email: user.email,
password: user.password
}).then(function(response){ /***********change here***********/
$location.path( "/" );
});
}, function errorCallback(response) {
});
}
};
});