RESTful Crud MEAN.js 路由
RESTful Crud MEAN.js routing
我是 MEAN 堆栈的新手,目前我正在使用 mean.js 构建我的应用程序。我目前正在四处看看路由在 Express 和 Angular.
中是如何工作的
我的服务器路由之一:
app.route('/api/projects/:projectId')
.get(users.requiresLogin, projects.read)
.post(users.requiresLogin, projects.apply)
.put(users.requiresLogin, projects.hasAuthorization, projects.update)
.delete(users.requiresLogin, projects.hasAuthorization, projects.delete);
我需要在向此特定路由发出任何类型的请求之前进行用户身份验证,我的 users.requireLogin 代码是:
exports.requiresLogin = function(req, res, next) {
if (!req.isAuthenticated()) {
return res.status(400).send({
message: 'User is not logged in'
});
}
next();
};
目前我的客户端路由有
.state('projects.view', {
url: '/:projectId',
templateUrl: 'modules/projects/client/views/view-project.client.view.html',
controller: 'ProjectsController',
controllerAs: 'vm',
resolve: {
projectResolve: getProject
},
data: {
pageTitle: 'Project {{ projectResolve.name }}'
}
最后客户端路由的解析是
getProject.$inject = ['$stateParams', 'ProjectsService'];
function getProject($stateParams, ProjectsService) {
return ProjectsService.get({
projectId: $stateParams.projectId
}).$promise;
}
一切都按预期工作,除非用户未通过身份验证,我想重定向他。目前,当我访问特定路由时,什么都没有发生,我只是在控制台中收到一条消息。
angular.js:12011 GET http://localhost:3000/api/projects/57f86cfc2e363838211b19c5 400 (Bad Request)
我想我的问题是,如何捕捉用户未登录的情况,以便我可以将他重定向到登录页面?
啊没关系。再深入一点,似乎 mean.js 会根据返回的错误代码自动处理重定向。我应该返回 401 以重定向到登录。
angular.module('core').factory('authInterceptor', ['$q', '$injector',
function ($q, $injector) {
return {
responseError: function(rejection) {
if (!rejection.config.ignoreAuthModule) {
switch (rejection.status) {
case 401:
$injector.get('$state').transitionTo('authentication.signin');
break;
case 403:
$injector.get('$state').transitionTo('forbidden');
break;
}
}
// otherwise, default behaviour
return $q.reject(rejection);
}
};
}
]);
您可以使用 Express#redirect
使用前请检查正确的Express版本。
exports.requiresLogin = function(req, res, next) {
var message = 'User is not logged in';
if (!req.isAuthenticated()) {
res.redirect('/login?nologin=' + message);
}else{
next();
}
};
我是 MEAN 堆栈的新手,目前我正在使用 mean.js 构建我的应用程序。我目前正在四处看看路由在 Express 和 Angular.
中是如何工作的我的服务器路由之一:
app.route('/api/projects/:projectId')
.get(users.requiresLogin, projects.read)
.post(users.requiresLogin, projects.apply)
.put(users.requiresLogin, projects.hasAuthorization, projects.update)
.delete(users.requiresLogin, projects.hasAuthorization, projects.delete);
我需要在向此特定路由发出任何类型的请求之前进行用户身份验证,我的 users.requireLogin 代码是:
exports.requiresLogin = function(req, res, next) {
if (!req.isAuthenticated()) {
return res.status(400).send({
message: 'User is not logged in'
});
}
next();
};
目前我的客户端路由有
.state('projects.view', {
url: '/:projectId',
templateUrl: 'modules/projects/client/views/view-project.client.view.html',
controller: 'ProjectsController',
controllerAs: 'vm',
resolve: {
projectResolve: getProject
},
data: {
pageTitle: 'Project {{ projectResolve.name }}'
}
最后客户端路由的解析是
getProject.$inject = ['$stateParams', 'ProjectsService'];
function getProject($stateParams, ProjectsService) {
return ProjectsService.get({
projectId: $stateParams.projectId
}).$promise;
}
一切都按预期工作,除非用户未通过身份验证,我想重定向他。目前,当我访问特定路由时,什么都没有发生,我只是在控制台中收到一条消息。
angular.js:12011 GET http://localhost:3000/api/projects/57f86cfc2e363838211b19c5 400 (Bad Request)
我想我的问题是,如何捕捉用户未登录的情况,以便我可以将他重定向到登录页面?
啊没关系。再深入一点,似乎 mean.js 会根据返回的错误代码自动处理重定向。我应该返回 401 以重定向到登录。
angular.module('core').factory('authInterceptor', ['$q', '$injector',
function ($q, $injector) {
return {
responseError: function(rejection) {
if (!rejection.config.ignoreAuthModule) {
switch (rejection.status) {
case 401:
$injector.get('$state').transitionTo('authentication.signin');
break;
case 403:
$injector.get('$state').transitionTo('forbidden');
break;
}
}
// otherwise, default behaviour
return $q.reject(rejection);
}
};
}
]);
您可以使用 Express#redirect
使用前请检查正确的Express版本。
exports.requiresLogin = function(req, res, next) {
var message = 'User is not logged in';
if (!req.isAuthenticated()) {
res.redirect('/login?nologin=' + message);
}else{
next();
}
};