AngularJS using an interceptor to handle $http 404s - promise not defined error

前端 未结 3 881
庸人自扰
庸人自扰 2021-02-01 20:01

I have an Angular app, for which I want to handle 404s form an API end point. The key components are like so:

// app.js

var myApp = angular.module(\'myApp\', [\         


        
相关标签:
3条回答
  • 2021-02-01 20:39

    I think the structure of you interceptor might be off. I posted an answer with a sample interceptor here (Handle HTTP 302 response from proxy in angularjs) that you might find useful. It works for me on a daily basis.

    0 讨论(0)
  • 2021-02-01 20:40

    So, my solution which works, using the new interceptor syntax is as follows:

    // interceptors.js
    
    .factory('httpRequestInterceptor', function ($q, $location) {
        return {
            'responseError': function(rejection) {
                // do something on error
                if(rejection.status === 404){
                    $location.path('/404/');                    
                }
                return $q.reject(rejection);
             }
         };
    });
    
    
    // app.js
    
    myApp.config( function ($httpProvider, $interpolateProvider, $routeProvider) {
        $httpProvider.interceptors.push('httpRequestInterceptor');
    
        $routeProvider
        ...
        .when('/404/:projectId', {
            templateUrl : 'partials/404.tmpl.html',
            controller: '404Ctrl',
            resolve: {
                project: function ($route) {
                    // return a dummy project, with only id populated
                    return {id: $route.current.params.projectId};
                }
            }
        });
    });
    
    
    // 404.tmpl.html
    
    ...
    
    <h1>Oh No! 404.</h1> 
    <p>Project with ID {{ project.id }} does not exist.</p>
    

    This is a simplified version, but demonstrates how I used the interceptor pattern to solve my issue.

    Comments are welcome.

    0 讨论(0)
  • 2021-02-01 20:51

    Is just easier to pass parameter as

    <div class="fullPortfolio" ng-show="projectId.length">Project Id passed</div>

    and then when project id is not exist

    <div class="fullPortfolio" ng-show="!projectId.length">Project Id is not exist</div>

    0 讨论(0)
提交回复
热议问题