2016-09-24 207 views
1

我的http呼叫正在返回200,但没有响应被捕获。 我的代码里面订阅没有被打到。当我在邮差测试中API正在返回数据。这是我的代码。Angular 2 http post正在返回200,但没有响应返回

getToken(authcode: string) { 

     var data = 'client_id=InspectWebApp_client&code=' + authcode + '&redirect_uri=http://localhost:3000&grant_type=authorization_code'; 
     let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
     let options = new RequestOptions({ headers: headers }); 
     this.http.post('https://fedloginqa.test.com/as/token.oauth2', data, options) 
      .subscribe((res: Response) => { 

       var resultsToken = res.json(); 
       localStorage.setItem("access_token",resultsToken.access_token) 
       //return this.inspections; 
      }) 

    } 

回答

2

我也面临同样的问题。使用Observables上的map函数解决了该问题。这里是我的实现:

login(Username:string, Password:string) : Observable<Response>{ 
    let headers = new Headers(); 
    headers.append("Authorization", "Basic " + btoa(Username + ":" + Password)); 
    headers.append("Content-Type", "application/x-www-form-urlencoded"); 
    return this._http.post(this._baseUrl+"auth/login", " " , {headers: headers} ) 
     .map((response: Response) => { 
      return response;  
     }).catch(this.handleError); 
} 

这里handleError是一个函数,以捕获生成的概念。这是login.service.ts中的一个函数,它将用户名和密码发送到api以获取数据。您可以看到,我正在返回此服务中地图功能的响应。现在,该返回响应可以通过以下方式在订阅功能中捕获:

this._loginService.login(this.username, this.password) 
     .subscribe(
      (response) => { 
       //Here you can map the response to a type. 
       this.apiResult = <IUser>response.json(); 
      }, 
      (err) => { 
       //Here you can catch the error 
      }, 
      () => {this.router.navigate(['home'])} 
     ); 
相关问题