【问题标题】:cannot retrieve data from angular http无法从角度 http 检索数据
【发布时间】:2018-06-14 19:52:36
【问题描述】:

我正在尝试使用以下代码使用 http 模块从我的 mongodb 中的集合中检索数据,

getPosts() {
    return this.http.get('http://localhost:5005/blog/getposts').map(res => {
      console.log("mapped result",res);
      res.json()
    });
  }

每次响应都会失败

Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at Response.webpackJsonp.../../../http/@angular/http.es5.js.Body.json (http.es5.js:797)
    at MapSubscriber.project (auth.service.ts:45)
    at MapSubscriber.webpackJsonp.../../../../rxjs/operators/map.js.MapSubscriber._next (map.js:79)
    at MapSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
    at XMLHttpRequest.onLoad (http.es5.js:1226)
    at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:425)
    at Object.onInvokeTask (core.es5.js:3881)
    at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:424)
    at Zone.webpackJsonp.../../../../zone.js/dist/zone.js.Zone.runTask (zone.js:192)

但是当我用邮递员尝试时,我得到了预期的结果,

我正在从服务返回响应并从这样的组件订阅其数据,

ngOnInit() {
    this.auth.getPosts().subscribe(data => {
      this.value = data.posts;
      console.log("blog component",this.value)
    },err => {
      console.log(err);
    })
  }

我做错了什么?任何帮助将不胜感激

【问题讨论】:

  • 试试这个 console.log("blog component",this.value | json);
  • 你使用的是Http模块还是HttpClient模块?
  • 我正在使用 http 模块。其他电话工作正常,但只是这个:(

标签: mongodb angular rest mean-stack angular-http


【解决方案1】:

您需要将map中的响应转换并订阅它以获得最终的JSON响应

更新后的代码如下所示-

getPosts() {
    return this.http.get('http://localhost:5005/blog/getposts')
    .map(res => res.json())
    .subscribe((data: any) => {
        //console.log(data);
    });
}

我希望这会有所帮助。 :)

【讨论】:

  • 我已经订阅了一个组件的结果。我已经更新了我的问题,请检查
  • 您在正确的组件中订阅它。您缺少的是从身份验证服务中的 http get 调用订阅映射响应。该服务没有返回订阅,因此没有返回错误。如果我遗漏了什么,请告诉我。
  • 您可以在这里发布更新的代码(身份验证服务)吗?它应该可以工作。
  • 我尝试复制您在答案中的确切代码
【解决方案2】:

尝试在.map()内返回

getPosts() {
    return this.http.get('http://localhost:5005/blog/getposts').map(res => {
      console.log("mapped result",res);
      return res.json()
    });
  }
}

或去掉括号(这给你一个隐含的回报),

getPosts() {
    return this.http.get('http://localhost:5005/blog/getposts')
      .map(res => res.json() );
  }
}

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 2012-11-04
    • 2018-09-19
    • 1970-01-01
    • 2019-06-24
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多