RESTful Crud MEAN.js路由

时间:2016-10-12 05:06:51

标签: angularjs node.js express angular-ui-router mean-stack

我是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获取http://localhost:3000/api/projects/57f86cfc2e363838211b19c5 400(错误请求)

我想我的问题是,如何查看用户未登录的情况,以便将其重定向到登录页面?

2 个答案:

答案 0 :(得分:1)

啊,没关系。进一步挖掘,似乎mean.js根据返回的错误代码自动处理重定向。我本应该返回401重定向登录。

exclude

答案 1 :(得分:0)

您可以使用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();
    }
};