【问题标题】:HttpClient: Can't get data from external URLHttpClient:无法从外部 URL 获取数据
【发布时间】:2017-11-29 12:30:35
【问题描述】:

我有一个非常基本的(GET-)请求来获取某种数据(case-list.service.ts):

fetchCase(caseId: string) {
  return this.httpClient.get('http://localhost:54355/api/case/' + caseId);
}

我需要那种 URL,因为我的后端在另一个端口上。 但是,我收到一个错误,请求没有被执行:

ERROR 错误:需要资源 在 viewWrappedDebugError (core.es5.js:8422) 在 callWithDebugContext (core.es5.js:13477) 在 Object.debugCheckAndUpdateView [as checkAndUpdateView] (core.es5.js:13007) 在 ViewRef_.webpackJsonp.../../../core/@angular/core.es5.js.ViewRef_.detectChanges (core.es5.js:10174) 在 core.es5.js:4812 在 Array.forEach () 在 ApplicationRef_.webpackJsonp.../../../core/@angular/core.es5.js.ApplicationRef_.tick (core.es5.js:4812) 在 core.es5.js:4684 在 ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:392) 在 Object.onInvoke (core.es5.js:3890)

但是,当我将该 URL 替换为本地 URL(例如 '/api/case/' + caseId)时,它会按预期工作。

localhost-URL 不是问题。我尝试输入http://www.google.de/something,它抛出了与本地主机地址相同的错误。

任何想法为什么这不起作用? 任何帮助表示赞赏:)

@更新: 我在我的组件控制器中订阅了那个 observable: case-list.component.ts:

    this.caseListService.fetchCase(this.caseId).subscribe( (res) => {

      console.log(res);
      // comment in when backend is available
      // this.case = res;
    });

【问题讨论】:

  • 当你直接去这个网址'http://localhost:54355/api/case/' + caseId会发生什么??
  • 它不可用,因为我的后端还不能工作。尽管如此,它应该给我一个 404 而不会完全崩溃。它与 Http 完美配合(不幸的是现在已弃用)
  • this.caseListService.fetchCase(this.caseId).subscribe( res => { console.log(res); // comment in when backend is available // this.case = res; }, error => { console.log(error); } ); 如果您尝试这样做,console.log 中的错误块会被打印出来吗??
  • 不 - 如果我添加错误函数,没有任何变化。它甚至没有到达这部分,因为它已经在 this.http.get() 行中失败了。

标签: angular http


【解决方案1】:
private http: HttpClient;
fetchCase(caseId: string) {
    this.http.get('http://localhost:54355/api/case/' + caseId).subscribe(data => {
        // Read the result field from the JSON response.get response
        caseId = data['rows'];
    });
    return caseId;
}

试试这个。我认为订阅是提出获取请求所必需的。因为没有什么可以为回报而坚持的。

【讨论】:

  • 我正在这样做。我要返回整个 Observable,并在另一个类中订阅它。我更新了我的答案以使其更清楚:)
【解决方案2】:

好的,就我而言,我是一个错误配置的 HTTP_INTERCEPTOR。外部 URL 没有添加到那里。

感谢大家的帮助:)

【讨论】: