无法捕获来自其他API的响应

时间:2017-11-06 07:11:42

标签: angular rest api linkedin-api

我正在尝试在angular 2应用程序中调用linkedIn访问令牌API。 我能够在chrome调试网络中看到响应。 API正在完美地返回数据但我的问题是在我的应用程序中我无法捕获该响应。 以下是我的代码。

 getProfileData() {

    //IN.API.Raw("https://api.linkedin.com/v1/people/~?oauth2_access_token=" + this.code + "&format=json").result(this.displayProfiles).error(this.displayProfilesErrors);
    this.apiclass.GetTokenAPILink(this.code).subscribe(
        x => {
            this.datalink = x;
            console.log("Linkedin",x)
        });

}
  public GetTokenAPILink(code: any): Observable<any> {
    return this.LinkedinAPIWithHttpInfo(code)
        .map((response: Response) => {
            if (response.status === 204) {
                return undefined;
            } else {
                return response.json() || {};
            }
        });
}
public LinkedinAPIWithHttpInfo(code:any): Observable<Response> {
    const path = "https://www.linkedin.com/oauth/v2/accessToken?grant_type=authorization_code&code=" + code + "&redirect_uri=http://localhost:4200/ProfileLogin&client_id=--clientID--&client_secret=--key--";

    let queryParameters = new URLSearchParams();
    let headers = new Headers(this.defaultHeaders.toJSON()); // https://github.com/angular/angular/issues/6845


    // to determine the Content-Type header
    let consumes: string[] = [
        'application/json',
        'text/json',
        'application/xml',
        'text/xml',
        'application/x-www-form-urlencoded'
    ];

    // to determine the Accept header
    let produces: string[] = [
    ];

    headers.set('Content-Type', 'application/x-www-form-urlencoded');

    let requestOptions: RequestOptionsArgs = new RequestOptions({
        method: RequestMethod.Post,
        headers: headers,
        body: "Hi"
    });
    // https://github.com/swagger-api/swagger-codegen/issues/4037


    return this.http.request(path, requestOptions);
}

以下部分未发现API的响应

return this.LinkedinAPIWithHttpInfo(code)
        .map((response: Response) => {
            if (response.status === 204) {
                return undefined;
            } else {
                return response.json() || {};
            }
        });

1 个答案:

答案 0 :(得分:0)

我认为您的请求返回了一些符合错误条件的代码(即小于200且大于299),因此正在调用错误回调。可能是永久重定向等,不确定。

在您的订阅中添加错误回调并检查错误是什么

getProfileData(){

//IN.API.Raw("https://api.linkedin.com/v1/people/~?oauth2_access_token=" + this.code + "&format=json").result(this.displayProfiles).error(this.displayProfilesErrors);
this.apiclass.GetTokenAPILink(this.code).subscribe(
    x => {
        this.datalink = x;
        console.log("Linkedin",x)
    }, error => {
   console.log("Error is ",error);

  });

这将打印您所获得的错误,并且应该能够指导您正确的方向。