AngularJS:如何使用routeprovider处理下载链接?

时间:2018-11-09 10:05:28

标签: angularjs download route-provider

我在前端使用了AngularJS,routeprovider随之而来。我以前不需要处理下载,因此提供程序的性能没有问题,但是现在我在处理设置中的下载链接时遇到了麻烦。

这是情况。 routeprovider的默认路由重定向到 koti.html ,我无法对下载链接进行硬编码,因为它是动态创建的。因此,下载链接会将用户重定向到首页。

我能够成功使用没有井号标签前缀的链接,但是在这种情况下,我的身份验证拦截器不会触发并将我的身份验证令牌包含在请求中。

可以通过两种方式解决问题:

  • 通过routeprovider启用动态下载链接
  • 使身份验证拦截器服务在不通过路由提供者的请求中包含身份验证令牌

哪种方法更好,我应该进行哪些更改才能使其正常工作?

这是由于我最近的测试而现在带有井号的下载网址:

<a target="_self" href="https://www.example.com:8888/#/downloads/public/download.txt">

这是我的路线提供者:

.config(['$routeProvider', '$locationProvider', '$httpProvider', function($routeProvider, $locationProvider, $httpProvider){
        $locationProvider.hashPrefix('');
        $httpProvider.interceptors.push('authInterceptorService');
        $routeProvider
                .when('/', {
                templateUrl: 'koti.html',
                controller: 'mainCtrl'
                })
                .when('/testi', {
                templateUrl: 'testi.html',
                })
                .when('/logout', {
                templateUrl: 'logout.html',
                })
                .when('/login', {
                templateUrl: 'login.html',
                })
                .when('/haut', {
                templateUrl: 'haut.html',
                })
                .when('/koti', {
                templateUrl: 'koti.html',
                })
                .when('/loki.html', {
                templateUrl: 'loki.html',
                })
                .when('/raportointi', {
                templateUrl: 'raportointi.html',
                })
                .when('/tulosraportti',{
                templateUrl: 'tulosraportti.html',
                })
                .when('/opiskelijat',{
                templateUrl: 'opiskelijat.html',
                })
                .when('/pk', {
                templateUrl: 'pk.html',
                })
                .when('/varaushaku',{
                templateUrl:'varaushaku.html',
                })
                .otherwise({
                redirectTo: '/koti'
                });
}])

这是我的身份验证拦截器服务:

.factory('authInterceptorService', ['$q', '$window', '$localStorage', function($q, $window, $localStorage){
        return {
                'request': function (config){
                        config.headers = config.headers || {};
                        try{
                                if ($localStorage.user.accessToken) {
                                        config.headers.Authorization = 'bearer ' + $localStorage.user.accessToken;
                                }
                                return config;
                        }catch(err){
                                return config;
                        }
                },
                'response' : function(response){
                        headers = response.headers();
                        if(headers.tokenexpired !== 'false' && typeof headers.tokenexpired !== "undefined"){
                                console.log("Expired");
                                delete $localStorage.user
                                window.location = "/";
                        }
                        return response

                },
                'responseError': function(responseError){
                        if(responseError.data.tokenstatus === "expired"){
                                delete $localStorage.user
                                window.location = "/";
                        }
                        else if(responseError.status === 401 || responseError.status === 403) {
                                console.log("forbidden");
                                delete $localStorage.user
                                window.location = "/";
                        } else {
                                window.location = "/";
                        }
                        return $q.reject(responseError);
                }
        };
}])

0 个答案:

没有答案