在AngularJS中获取401上的响应对象

时间:2017-08-05 14:11:23

标签: javascript angularjs express

我正在使用Angular 1.6.4,Express 4.15.2和express-session。 我试图通过检查req.session.user参数的存在来捕获用户是否未经授权访问某个路由。如果他不是,我想发送401响应状态并改变Angular中的状态。

问题是我没有得到任何响应对象来检查状态。 我已经尝试使用拦截器,注销error.response.body,注销所有内容以确定我丢失响应对象的位置。

以下是一些代码,非常感谢任何帮助!

快递:

app.get('/update', sessionCheck, function(req, res) {
  res.send('session');
});

function sessionCheck(req, res, next){
    if(req.session.user) {
      next();
    } else {
      console.log('before');
      return res.status(401).send('Unauthorized');
      console.log('after');
    }
}

角:

.state('update', {
  url: '/update',
   views: {
    "": {
      templateUrl: 'templates/update.html',
      controller: function($http) {
        return $http.get('/update').then(function(response) {
          console.log('Ok response' + response);
        }, function(error) {
          console.log('Error response' + error.response.body);
        });
      },
    },
    "carousel": {
      templateUrl: "templates/carousel.html"
    },
    "footer": {
      templateUrl: "templates/footer.html"
    }
  }
})

network screen

1 个答案:

答案 0 :(得分:0)

您是否尝试使用拦截器执行此操作?

您可以尝试这种方式:

newTime

})

请注意,我们正在处理 responseError

您还需要在配置函数中注册拦截器:

int number = keyCode[1]-'0';

您可以看到有关此拦截器的更多信息:

Capture HTTP 401 with Angular.js interceptor

<强>更新

您也可以这样注册拦截器:

anyModule.service('yourInterceptor', function($q) {
var service = this;

service.responseError = function(response) {
    if (response.status == 401){
        //do something
    }
    return $q.reject(response);
};

然后以这种方式注册拦截器(在模块的配置中):

$httpProvider.interceptors.push('yourInterceptor');

请注意,您在 responseInterceptors 中推送拦截器。这项工作对我而言。