角HttpHeaders responseType:'text'。赋予'类型'字符串'不能分配给类型'json'”

时间:2019-08-14 20:02:07

标签: angular http-headers angular-httpclient

Angular HttpHeaders responseType:'text'。给Type 'string' is not assignable to type 'json'。错误。我知道响应不是JSON。我不明白如何更改类型?我想获取该文本(HTML),然后再使用正则表达式进行解析。

代码

    const httpOptions = {
      headers: new HttpHeaders({
        accept: '*/*',
        contentType: 'application/x-www-form-urlencoded',
      }),
      responseType: 'text',
    };
    post = this.httpClient.post(destinationUrl, httpBody, httpOptions);

    post.subscribe(
      (res) => {
        console.log(res)
      },
      (error) => {
        console.error('download error:', error)
      },
      () => {
        console.log('Completed')
      },
    );

控制台错误 enter image description here

如您所见,响应类型为文本。由于某些我不了解的原因,我无法使其接受文本,因为它正在等待json ...

2 个答案:

答案 0 :(得分:9)

我解决了使HTTPOptions成为对象的问题

let HTTPOptions:Object = {

        headers: new HttpHeaders({
            'Content-Type': 'application/json'
        }),
        responseType: 'text'
     }
    return this.http.post<any>(url, body,  HTTPOptions ).pipe(
        catchError(this.handleError)
    );

答案 1 :(得分:0)

根据official angular documentation

  

重载#3构造一个POST请求,该请求将正文解释为   文本字符串,并以字符串值返回响应。

     

post(url:string,body:any,options:{headers :: HttpHeaders | {   [标题:字符串]:字符串|串[]; };观察?参数?:   HttpParams | {[参数:字符串]:字符串|串[]; }; reportProgress ?:   布尔值responseType:“文本”; withCredentials ?:布尔值; }):   可观察参数url字符串端点URL。

     

将任何内容替换为内容。

     

options对象HTTP选项

     

返回可观察值:响应的可观察值,带有   字符串类型的响应主体。

通过查看文档,我们可以执行以下操作。响应(主体内部)为字符串:

clickMe() {
    this.httpClient.post(
      `https://reqres.in/api/users`,
      {
        name: "paul rudd",
        movies: ["I Love You Man", "Role Models"],
      },
      {
        observe: 'response',
        responseType: 'text',
      }
    ).subscribe(x => console.log('x: ', x.body))
  }

Stackblitz example for code above