【问题标题】:Can not use the data from a node Server in angular无法以角度使用来自节点服务器的数据
【发布时间】:2019-04-02 16:51:33
【问题描述】:

我尝试制作自己的天气预报。我拿了darksky作为数据。 我的服务器是一个简短的 node.js 服务器,带有地理数据和预测部分。

预测部分: ...

const request = require('request');

const forecast = (latitude, longitude, callback) => {
  const url =
   darksky url
  var weatherData = {};

  request({ url, json: true }, (error, { body }) => {
    if (error) {
      callback('Unable to connect to weather service', undefined);
    } else if (body.error) {
      callback('Unable to find location', undefined);
    } else {
      callback(
        undefined,
        (weatherData = {
          daily: body.daily.data[0].summary,
          temp: body.currently.temperature,
          regen: body.currently.precipProbability
        })
      );
    }
  });
};

module.exports = forecast;

...

服务器:

...

const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');

const geocode = require('./utils/geocode');
const forecast = require('./utils/forecast');

const app = express();
const port = process.env.PORT || 3000;

app.use(cors());
app.use(bodyParser.json());

app.get('/', (req, res) => {
    res.send('Hello World');
});

app.get('/weather', (req, res) => {
  console.log(req.query.search);
  geocode(req.query.search, (error, { latitude, longitude, location } = {}) => {
    if (error) {
        return res.send({ error });
    }

    forecast(latitude, longitude, (error, forecastData) => {
        if (error) {
            return res.send({ error });
        }
        const data =({
            location,
            forecast: forecastData
        });
        console.log(JSON.stringify(data));
        res.send(JSON.stringify(data));
    });
});
});


app.listen(port, () => {
  console.log("Server is up and running");
});

...

现在我正在尝试在我的 Angular 7 应用程序中使用它。

我做了一个服务:

...

 getDataServer(addy: string) {
    return this.http.get(this.url + addy).subscribe(responseData => {
      console.log(responseData);
    });
  }

...

Responsedata 包含此格式的所有必需信息:

{地点:斯图加特,预报:{每日:'太阳',再生:0,温度:17}}

现在我尝试在我的组件中获取预测,但这不起作用。我尝试制作一个 Observable 并订阅,但没有任何效果。

也许你有一点提示,

谢谢,

汤姆

【问题讨论】:

    标签: node.js api angular7


    【解决方案1】:

    请将您的服务代码修改为

    getDataServer(addy: string) {
        return this.http.get(this.url + addy).pipe(map(res => res.json()));
      }
    

    并在您的组件中将此服务称为

    this.your_service_property.getDataServer(addy).subscribe(data => {
    console.log(data);
    // Try updating your html here
    })
    

    【讨论】:

      【解决方案2】:

      谢谢,这对我帮助很大。我以几乎相同的方式尝试了此操作,但在您的帮助下,我得到了服务的解决方案,不得不将其更改为:

      getDataServer(addy: string) {
          return this.http.get(this.url + addy).pipe(map(res => res));
        }
      

      从 res.json() 得到一个错误。 HttpClient 发生了变化,我得到了一个 json 对象。

      组件中的下一步:

      this.your_service_property.getDataServer(addy).subscribe((data: any) => {
      console.log(data);
      

      必须对 data 属性使用 any。没有我总是会遇到类似的错误

      如果我试图从数据-data.location 中获取一些值,则“对象”类型上不存在属性“位置”。尝试了一个界面,但仍然出现错误,所以我采用了最简单的方法,并且成功了。

      但是有界面的部分还在我的脑海中,我稍后会尝试。

      【讨论】:

        猜你喜欢
        • 2020-12-11
        • 2018-07-07
        • 2018-02-09
        • 2020-03-10
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多