2015-04-15 2 views
0

Я уже создал HTTP-перехватчик и, основываясь на своих наблюдениях, применим только ко всем, использующим службу $ http. Что делать, если я хочу перехватить даже файлы css, html и js, используемые в шаблоне? Является ли это возможным?Можно ли перехватывать html, css и js файлы, используемые в angularjs?

Это код перехватчика я говорил выше:

app.factory('redirectInterceptor', function($q,$location,$window){ 
return { 
    'response':function(response){ 
    if (typeof response.data === 'string' && response.data.indexOf("My Login Page")>-1) { 
     $window.location.href = "/login.html"; 
     return $q.reject(response); 
    }else{ 
     return response; 
    } 
    } 
} 

}); 

app.config(['$httpProvider',function($httpProvider) { 
    $httpProvider.interceptors.push('redirectInterceptor'); 
}]); 

Я хочу быть в состоянии сделать перехватчик для CSS, HTML и JS (для шаблона) так же, как выше.

+1

Что вы пытаетесь сделать, кажется более подходящим для реализации на стороне сервера. – Chandermani

+0

вы можете перехватывать html-файлы – harishr

+0

@Chandermani, когда сессия заканчивается, и я пытаюсь посетить страницу, для которой требуется аутентификация, страница будет пустой. Когда я отлаживаю использование firebug, я мог видеть, что некоторые из css и js вызываются, но ответ равен 302. Но перенаправление не происходит. Я хотел бы сделать перехватчик, который будет делать то же самое, что и код, который я опубликовал. – user3714598

ответ

1

Как вы сказали,

это относится только ко всему, что использует $ HTTP сервис

Итак, если вы хотите, чтобы перехватить запросы на HTML, CSS и JS-файлов. Это лучше всего делать на сервере, а не на клиенте.

+0

Собственно, это просто основано на моем наблюдении, поэтому я ожидал, что 1) кто-то согласится с тем, что я сказал, и, вероятно, даю мне решение или 2) кто-то не согласится и поправит меня. Во всяком случае, я уже говорил с парнем и попросил его сделать некоторые изменения, но он настоял, чтобы это было сделано на фронте. – user3714598

1

вы можете перехватить HTML файлы

var requestInterceptor = function (config) { 

     if (config.url.indexOf(".html") != -1) { 
      //custom logic 
     } 
    } 

хотя выше не работает с .js или .css, потому что они загружаются с помощью тега.

.html файлы сохраняются в шаблонах кэш и пожаров $ запросов HTTP ...

хотя вы должны идти вперед и проверить, что все запрашиваемых делая console.log(config.url) в перехватчик, чтобы быть уверенным ..

1

Это классическая проблема XY. Вы думаете о решении своей проблемы, но это неправильный путь.

Эта линия, от вашего комментария, объясняет реальную проблему:

но файлы JS, которые я ссылаюсь, бизнес-логика проекта. Так что сделать его общедоступным - это не вариант.

Итак, ваша проблема заключается в том, что вы не хотите раскрывать бизнес-логику людям, которые не могут/не могут войти в систему.

Существует несколько решений. Но все сводится к одному: отделяет вашу бизнес-логику от общего кода js, используемого для пользовательского интерфейса и т. Д..

После того, как вы разделили js на две части (не обязательно два файла, но это должно быть как минимум два файла, это может быть больше), вы можете публиковать свои общие js-файлы (ы) как общедоступные. Затем вы можете решить, как справиться с загрузкой бизнес-логики:

  1. Позволить это нормально

    Это, вероятно, самая простая стратегия. Просто ничего не делайте, и он не сможет загрузить. Предположительно, вам нужна только ваша бизнес-логика на страницах с входами, поэтому не иметь ее на страницах посадки или входа не должно быть проблемой.

  2. динамически Включите его в шаблоне

    Просто опускаем сценарий тег, который загружает бизнес-логики JS, если пользователь не вошел в систему.

  3. Load Business Logic Динамически в JS

    Либо загрузите его с помощью AJAX, либо исправьте его, либо используйте require.js или используйте jQuery getScript() или что-то похожее на загрузку бизнес-логики только тогда, когда пользователь выполнил вход.

Если вы креативны, вы, вероятно, можете придумать еще пару способов справиться с загрузкой бизнес-логики JS. Независимо от того, что это такое, ключевым является то, что вы должны публиковать общие файлы js и css.

Смежные вопросы