2013-07-02 4 views
0

Я добрался до выбора между angularjs и dojo в качестве рамки MV * переднего конца. Одна из особенностей, которая, на мой взгляд, имеет решающее значение, - это способность делать ненавязчивую и прозрачную аутентификацию. В этом отношении я был чрезвычайно впечатлен возможностью углового использования с использованием перехватчиков http. См. http://www.espeo.pl/2012/02/26/authentication-in-angularjs-application для хорошей реализации/объяснения примера.Как полностью перехватить и запросить HTTP-запросы с помощью dojo

Это позволяет поставить в очередь все ответы 401 во время ожидания успешного входа в систему и затем повторно передать их после успешного входа в систему, используя комбинацию событий трансляции, обработки событий и перехватчика http (плюс очередь запросов) , Накладные расходы по каждому запросу кажутся минимальными.

Я хотел сравнить способность додзё сделать то же самое, но из моего экзамена это не представляется возможным. Изучив документацию Dojo, похоже, что это возможно было бы в dojo 1.4 с использованием ioPipline, но это устарело в пользу dojo/request/notify, которое, как представляется, не обеспечивает как низкий уровень перехвата (в частности, это по-видимому, не дает доступа к объекту запроса при получении ошибки). также неясно, можно ли изменить или заменить ответ в пределах уведомляемой функции ...

Может ли кто-нибудь указать мне на очевидный пример этого, выполненного с использованием службы запроса/уведомления dojo или альтернативной методологии используя додзё? Критические требования заключаются в том, что аутентификация должна быть прозрачной для защищенных функций/контроллеров/объектов (они должны просто получить обещание, которое в конечном итоге выполняется), чтобы код аутентификации мог быть централизован (он не должен требовать модификации для каждого объекта/события/и т. д., который делает запрос) и что он должен быть защищен (в том смысле, что как аутентификация/авторизация должна произойти на стороне сервера, так и без обработки javascript должны быть в состоянии обойти это требование) ...

ответ

0

Вы можете зарегистрироваться обработчиков в пределах dojo/request/registry для перехвата и обработки запросов, сделанных с использованием dojo/request любым способом, который вы хотите. Вот модифицированный (непроверенный, вероятно, немного неисправен) пример на основе справочного руководства:

require([ "dojo/request/registry", "dojo/request/xhr" ], function (registry, xhr) { 
    request.register(function (url, options) { 
    return xhr(url, options).response.then(function (response) { 
     if (response.status === 401) { 
     // retry later 
     } 

     return response; 
    }); 
    }, true); 
}); 

В примере выше, любой запрос сделанный с dojo/request будет перехвачен и метод при условии, будет называться. Если вы хотите условно согласовать только определенные запросы с этим обработчиком, вы можете передать другую функцию тестера в качестве первого аргумента. Это подробно описано в справочном руководстве, приведенном выше.

Вся ваша функция обработчика тогда должна сделать, это вернуть обещание, которое в конечном итоге разрешит ожидаемые данные.

+0

Этот пример не работает. Зарегистрированная функция никогда не вызывается для запроса XHR. – Andrew

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