Typescript Angular2中的$http.defaults.headers
我正在使用授权。在AngularJS 1.x中,我使用以下函数登录:Typescript Angular2中的$http.defaults.headers,typescript,angular,angular2-services,Typescript,Angular,Angular2 Services,我正在使用授权。在AngularJS 1.x中,我使用以下函数登录: function login(username, password) { var deferred = $q.defer(); $http.post("/api/login", { "username": username, "password": password }).then(function(response) {
function login(username, password) {
var deferred = $q.defer();
$http.post("/api/login", {
"username": username,
"password": password
}).then(function(response) {
if (response.data && response.data.token) {
var tokenBegin = response.data.token.substring(0,6);
var bearer = (tokenBegin === 'Bearer') ? '' : 'Bearer ';
$http.defaults.headers.common.Authorization = bearer + response.data.token;
deferred.resolve({ status: true, message: 'Login complete' });
} else {
deferred.reject(response);
}
}, function(reason) {
deferred.reject(reason)
});
return deferred.promise;
}
这是在修改
$http.defaults
对象。我对Angular2和TypeScript有点不知所措,因为Http类似乎没有默认值
对象。我该怎么做呢?有几种方法可以做到这一点:
- 您可以实现自己的
类:BaseRequestOptions
我是这样登记的:import {BaseRequestOptions, RequestOptions, RequestOptionsArgs} from '@angular/http'; export class AppRequestOptions extends BaseRequestOptions { constructor() { } merge(options?:RequestOptionsArgs):RequestOptions { options.url = 'https://www.test.org' + options.url; return super.merge(options); } }
bootstrap(App, [ HTTP_PROVIDERS, provide(RequestOptions, {useClass: AppRequestOptions}) ]);
- 扩展
(或Http
)类本身:XHRBackend
@Injectable() export class CustomHttp extends Http { constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { super(backend, defaultOptions); } request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> { console.log('request...'); return super.request(url, options).catch(res => { // do something }); } get(url: string, options?: RequestOptionsArgs): Observable<Response> { console.log('get...'); return super.get(url, options).catch(res => { // do something }); } }
merge(选项?:RequestOptionsArgs):RequestOptions{options.headers.Authorization='Bearer:sometoken';return super.merge(选项);}
bootstrap(AppComponent, [HTTP_PROVIDERS,
new Provider(Http, {
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
deps: [XHRBackend, RequestOptions]
})
]);