RESTful Crud MEAN.js 路由
Posted
技术标签:
【中文标题】RESTful Crud MEAN.js 路由【英文标题】:RESTful Crud MEAN.js routing 【发布时间】:2017-02-20 19:12:01 【问题描述】:我对 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(错误请求)
我想我的问题是,我如何捕捉用户未登录的情况,以便我可以将他重定向到登录页面?
【问题讨论】:
您是否收到任何关于 statusCode 400 的错误消息? 【参考方案1】:啊,没关系。再深入一点,似乎 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);
;
]);
【讨论】:
【参考方案2】:您可以使用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();
;
【讨论】:
以上是关于RESTful Crud MEAN.js 路由的主要内容,如果未能解决你的问题,请参考以下文章
如何安全地删除用 yo (mean.js) 构建的 CRUD 模块 [关闭]
使用 MEAN.js Restful 无会话 API 后端的 Oauth 社交登录