[英]Error of appending http headers in ionic3?
我必须在所有 Http 请求中附加标头。 但是现在我的 api 调用都不起作用。
在下面提到的代码中,第一个函数是我的 HTTP 请求get
。第二个函数附加标头。
//http service to get
get(subUrl?:string, params?:object) {
let optionalParam:URLSearchParams = new URLSearchParams();
if (params) {
for (let item in params) {
optionalParam.set(item, params[item]);
}
}
return this.createCustomHeader()
.switchMap((headers)=> {
console.log('headers inside swithmap', headers);
return this.http.get(this.url + subUrl,
{search: optionalParam, headers: headers})
.map(response => response.json())
.catch(this.handleError)
});
}
//function to append header
private createCustomHeader() {
return Observable.create(obse=> {
this.dbservice.getToken().subscribe(res=> {
let headers = new Headers();
console.log('fetch token', res);
headers.append('Authorization ', `Bearer ${ res.access }`)
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
obse.next(headers);
obse.complete();
})
});
}
获取令牌的函数
getToken() : Observable<any>{
return Observable.create(obse=>{
let db = new SQLite();
db.create({
name: "data.db",
location: "default"
}).then((db: SQLiteObject) => {
db.executeSql('SELECT token,refresh_token FROM login',[])
.then(res => {
if (res.rows.length > 0) {
for (var i = 0; i < res.rows.length; i++) {
this.token=(res.rows.item(i).token);
this.refresh_token=(res.rows.item(i).refresh_token);
if(this.token && this.refresh_token){
// console.log('Both token found');
const tok={'access':this.token ,'refresh':this.refresh_token};
// console.log('edfghjhgfdfghjhgfdsdfghj--99--',tok);
obse.next(tok);
}else {
obse.next(false);
}
obse.complete();
}
}else
{
obse.next(false);
obse.complete();
}
})
.catch(e => {
obse.error(e);
// console.log(e);
});
}).catch(e => {
// console.log(e);
obse.error(e);
});
});
}
请纠正我。 谢谢
需要注意的几点
获取令牌后,接下来使用 BehaviourSubject。 在您的数据库服务中,创建一个行为主体
tokenSub= new BehaviorSubject({}); accessToken(){ return this.tokenSub.getValue(); }
在 getToken() 的回调中
this.tokenSub.next(tok);
附加标题
`私有 createCustomHeader() {
let token = this.dbservice.accessToken(); let header = new Headers(); if (token.hasOwnProperty('access')) { header.append('Authorization', 'Bearer ' + token['access']); } header.append('Content-Type', 'application/json'); header.append('Accept', 'application/json'); return header;
}`
在方法外声明头文件。
private headers = new Headers({ 'Content-Type': 'application/json' });
在方法设置标题中,如下所示。
this.headers.set('Authorization ', `Bearer ${ res.access }`)
this.headers.set('Accept', 'application/json');
希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.