繁体   English   中英

在 ionic3 中附加 http 标头时出错?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM