nir*_*ran 7 node.js express angularjs
我想在所有页面上保持会话.对于这个项目,我使用expressJs,nodeJS作为服务器端.AngularJS在前端.
我不确定,如何在视图更改或网址更改时处理会话.因为我需要照顾expressJS路由器或angularJs路由器.
我应该遵循什么方法?
angularJS路由器
myApp.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/welcome', {templateUrl: 'partials/welcome.html', controller: 'MyCtrl2'});
$routeProvider.when('/login', {templateUrl: 'partials/login.html', controller: 'MyCtrl2'});
$routeProvider.when('/signup', {templateUrl: 'partials/signup.html', controller: 'singupController'});
$routeProvider.otherwise({redirectTo: '/'});
}]);
Run Code Online (Sandbox Code Playgroud)
注册控制器
myApp.controller('singupController',function($scope,$rootScope,$http){
$scope.doSingnup = function() {
var formData = {
'username' : this.username,
'password' : this.password,
'email' : null
};
var jdata = JSON.stringify(formData);
$http({method:'POST',url:'/signup',data:jdata})
.success(function(data,status,headers,config){
console.log(data);
}).
error(function(data,status,headers,config){
console.log(data)
});
}
})
Run Code Online (Sandbox Code Playgroud)
ExpressJS路由器
module.exports = exports = function(app, db) {
var sessionHandler = new SessionHandler(db);
var contentHandler = new ContentHandler(db);
// Middleware to see if a user is logged in
app.use(sessionHandler.isLoggedInMiddleware);
app.get('/', contentHandler.displayMainPage);
app.post('/login', sessionHandler.handleLoginRequest);
app.get('/logout', sessionHandler.displayLogoutPage);
app.get("/welcome", sessionHandler.displayWelcomePage);
app.post('/signup', sessionHandler.handleSignup);
app.get('*', contentHandler.displayMainPage);
// Error handling middleware
app.use(ErrorHandler);
}
Run Code Online (Sandbox Code Playgroud)
注册后,我想重定向到登录页面.我怎么能在上面的路由器中做到这一点.我应该使用以下哪一项来更改应用程序的视图
1)$的位置angularJS
2)ExpressJS的重定向
所以我有同样的问题,并且公平地说,我可能已经阅读了我不记得的地方.
问题:Angular构建单页应用程序.刷新后,您将放宽范围并使用经过身份验证的用户.
途径
AngularJS模块提供了一个名为run的启动函数,该函数在加载页面时始终调用.非常适合刷新/重新加载.
myApp.run(function ($rootScope, $location, myFactory) {
$http.get('/confirm-login')
.success(function (user) {
if (user && user.userId) {
$rootScope.user = user;
}
});
}
Run Code Online (Sandbox Code Playgroud)
express-session为您保存会话,并使用您的浏览器发送的sessionId对您进行身份验证.所以它总是知道你是否经过身份验证.
router.get('/confirm-login', function (req, res) {
res.send(req.user)
}
);
Run Code Online (Sandbox Code Playgroud)
我只需要刷新并加载所有依赖项后,询问我是否经过身份验证并设置$ rootScope.user = authenticatedUserFromExpress;
这里有两个不同的概念 - 服务器端会话状态和Angular中客户端的用户状态.在express中,您可以通过req.session使用会话来管理基于会话的数据.
在角度方面,控制器中只有范围.如果要跟踪多个控制器中的某些数据,则需要创建一个服务来存储数据并将服务注入所需的控制器.
典型的生命周期是首先检查服务中是否已存在数据,如果是,则使用它.如果没有,请等待(由用户或应用程序或其他任何方式)填充数据,然后检测这些更改并与您的服务同步.
| 归档时间: |
|
| 查看次数: |
12072 次 |
| 最近记录: |