$ http请求.即使状态代码为401,响应也会成功

ott*_*der 0 javascript http angularjs

在我的Angular应用程序中,我有一个登录功能.但是当我发送错误的凭据并且响应带有状态401:Bad Credentials(甚至是response.status = 401)时,它仍然会成功.

所以我得到$ notify"我的拦截器中的成功登录然后是html错误页面.这令人困惑.我不知道我做了什么来制造这个混乱.

this.getTokenCustom = function (user) {
    $http.post('/login',
        JSON.stringify({username: user.username, password: user.password}))
        .then(
            function success(response) {
                localStorage.setItem('token', response.data.token);
                $.notify({message: "Success login"},{type:'success'});
                $state.go('roles');
            },
            function error(data) {
                console.log(data);
                $.notify({message: data.data.message},{type:'danger'});
            }
        );
};
Run Code Online (Sandbox Code Playgroud)

UPD

    this.getTokenCustom = function (user) {
    $http.post('/login',
        JSON.stringify({username: user.username, password: user.password}))
        .then(
            function success(response) {
                localStorage.setItem('token', response.data.token);
                $.notify({message: response.status + " Success login"},{type:'success'});
                $state.go('roles');
            },
            function error(data) {
                console.log(data);
                $.notify({message: data.data.message},{type:'danger'});
            }
        );
};
Run Code Online (Sandbox Code Playgroud)

屏幕

小智 6

可能的原因是您可能有一个不能正确处理错误条件的自定义拦截器.

这篇文章可以指出你正确的方向:http://www.jamessturtevant.com/posts/AngularJS-HTTP-Service-Success-Handler-400-Response-Code-and-Interceptors/

引用帖子:

处理拦截器的requestError或responseError并希望将错误传递给下一个处理程序时,必须使用promise api拒绝该消息:

$httpProvider.interceptors.push(function($q) {
    return {
        'requestError': function(rejection) {
            // handle same as below
        },

        'responseError': function(rejection) {
            if (canRecover(rejection)) {
                // if you can recover then don't call q.reject()
                // will go to success handlers
                return responseOrNewPromise;
            }

            // !!Important Must use promise api's q.reject()
            // to properly implement this interceptor
            // or the response will go the success handler of the caller
            return $q.reject(rejection);
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

在Angular的Github 存储库中报告了与您类似的问题,该问题与自定义拦截器无法正确处理错误条件有关.