【问题标题】:Can't get http response as a string in Angular 5无法在Angular 5中将http响应作为字符串获取
【发布时间】:2018-05-15 21:54:06
【问题描述】:

给定源 Angular 服务代码

@Injectable()
export class HomeContentService {

  constructor(private http: HttpClient) { }

  getContent(): Observable<string> {

    let fileURI = '/assets/content/home.md';
    let opt = { responseType: 'text' };
    return this.http.get<string>(
      fileURI,
      opt
    );

  }

调用getContent() 应该返回一个Observable&lt;string&gt;。但是,当我运行ng serve 时,我得到Type 'string' is not assignable to type 'json'

经过几次尝试后,webpack 似乎可以正常编译而无需我进行任何更改,但只要我关闭进程并再次尝试ng serve,问题就会再次发生。

我猜我的设置responseType: 'text' 有问题,但我不知道是什么问题。谷歌搜索也没有帮助。

有什么想法吗?

【问题讨论】:

  • 使用JSON.stringify(response)
  • 问题发生在之前我可以调用任何结果。如果我return JSON.stringify(this.http.get...),Angular 组件能订阅 Observable 吗?
  • 此外,它不是 JSON 字符串,因此将其字符串化似乎是错误的。请求的文件只是 Markdown 文本。

标签: javascript angular typescript rxjs


【解决方案1】:

我认为你没有指定地图。试试这个:

getContent ( ) : Observable< string > {
return this.http.get( YOUR REF )
       .map((res:Response) => res.text())
       .catch((error:any) => Observable.throw(error.json().error || 'Server error'));
} 

在 res.text 中你指定类型,如果响应是 json 将是“res.Json()”

为糟糕的英语道歉

【讨论】:

    【解决方案2】:

    您必须内联选项,因为这是 TypeScript 转译器可以推断您想要返回类型 Observable&lt;string&gt; 的唯一方法。

    getContent(): Observable<string> {
      let fileURI = '/assets/content/home.md';
      return this.http.get(fileURI, { responseType: 'text' });
    }
    

    另见Http ResponseType cannot be set #18586,参考alxhub制作的cmets。

    【讨论】:

      【解决方案3】:

      试试let opt = { responseType: 'text' as 'text' };

      解释:https://github.com/angular/angular/issues/18586

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 2018-11-14
        • 2016-12-27
        • 1970-01-01
        • 2015-08-09
        • 2018-08-15
        • 1970-01-01
        相关资源
        最近更新 更多