Angular HTTP get返回未定义

时间:2018-11-12 13:28:05

标签: angular

我有一个快递路由器

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Stats = require('../models/Stats.js');

/* GET ALL STATS */
router.get('/', function(req, res, next) {
  Stats.find(function (err, products) {
    if (err) return next(err);
    res.json(products);
  });
});

也是api

 getAll(){
    this.http.get('/main').subscribe(data => {
      console.log(data);
      return data;
    });
  }

我正在组件中使用它

show(){
      console.log(this.api.getAll());
   }

问题是当我在api中记录数据时,getAll()数据返回的很好,但是如果我在组件中记录了数据,则我未定义。

3 个答案:

答案 0 :(得分:1)

getAll()中,您应该返回可观察的值:

getAll(){
   return this.http.get('/main');
}

然后在调用该函数的位置订阅可观察对象:

show(){
  this.api.getAll().subscribe((data) => {
       // Here you can do what you want with the data.
       console.log(data)
   })
}

答案 1 :(得分:0)

您的服务应return,将服务更改为

getAll(){
    return this.http.get('/main').subscribe(data => {
      console.log(data);
      return data;
    });
  }

最好不要在组件部分中subscribe声明服务。

答案 2 :(得分:0)

您在Angular中使用的服务或API应该只是调用后端服务,而不是在服务本身中而是在组件中进行订阅。

服务:

getAll(){
  return this.http.get('/main');
}

组件:

this.service.getAll().subscribe((data)=> {
   // Your Data
},error => {
   console.log('error: ', error)
});