2017-06-07 314 views
0

我需要发送POST请求到API,并且如果响应代码== 400从响应中获取信息。 http://joxi.ru/l2ZM0KES0M8ZmJAngular 2获取请求错误响应,

public contactUsSendPost(params): Observable<{}> { 
    return this.contactUsSendPostWithHttpInfo(params) 
     .map((response: Response) => response.json()); 
} 

public contactUsSendPostWithHttpInfo(params): Observable<Response> { 
    const path = this.basePath + `/contact-us/send`; 

    let queryParameters = new URLSearchParams(); 
    let headers = new Headers(this.defaultHeaders.toJSON()); 
    let formParams = new URLSearchParams(); 
    headers.set('Content-Type', 'application/x-www-form-urlencoded'); 
    headers.set('Accept', 'application/json'); 

    if (params.email !== undefined) { 
     formParams.set('email', <any>params.email); 
    } 
    if (params.fullName !== undefined) { 
     formParams.set('fullName', <any>params.fullName); 
    } 
    if (params.question !== undefined) { 
     formParams.set('question', <any>params.question); 
    } 

    let requestOptions: RequestOptionsArgs = new RequestOptions({ 
     method: RequestMethod.Post, 
     headers: headers, 
     body: formParams.toString(), 
     search: queryParameters 
    }); 

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

然后即时试图从服务响应,但不能得到响应体。

this.fqService.contactUsSendPost(formValues).subscribe(
     data => console.log(data), 
     err => console.log(err) <------ 
    ); 

那么,我怎么能得到响应身体角度2从http响应与400状态码?

+0

你为什么要在设置参数时铸造? –

回答

0

你只需要捕捉你的observable上的错误,看下面修改后的代码。

public contactUsSendPost(params): Observable<{}> { 
     return this.contactUsSendPostWithHttpInfo(params) 
      .map((response: Response) => response.json()) 
      .catch(this.handleError); 
    } 

    public contactUsSendPostWithHttpInfo(params): Observable<Response> { 
     const path = this.basePath + `/contact-us/send`; 

     let queryParameters = new URLSearchParams(); 
     let headers = new Headers(this.defaultHeaders.toJSON()); 
     let formParams = new URLSearchParams(); 
     headers.set('Content-Type', 'application/x-www-form-urlencoded'); 
     headers.set('Accept', 'application/json'); 

     if (params.email !== undefined) { 
      formParams.set('email', <any>params.email); 
     } 
     if (params.fullName !== undefined) { 
      formParams.set('fullName', <any>params.fullName); 
     } 
     if (params.question !== undefined) { 
      formParams.set('question', <any>params.question); 
     } 

     let requestOptions: RequestOptionsArgs = new RequestOptions({ 
      method: RequestMethod.Post, 
      headers: headers, 
      body: formParams.toString(), 
      search: queryParameters 
     }); 

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

    private handleError (error: Response | any) { 
     return Observable.throw(error.code); 
    } 
+0

我可以从该错误对象获取响应信息(http://joxi.ru/l2ZM0KES0M8ZmJ)吗?或者只有错误代码和状态? – RmRamzzz

+0

我相信它将整个错误作为对象传递。所以你可以得到错误信息。 – MichaelSolati

0

你可以升级到的HttpClient模块角4.3及以上应用,

如果传递整个请求对象作为输入的http.request方法,你会得到一个完整的响应对象。