我尝试制作自己的天气预报。我拿了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并订阅,但没有任何效果。
也许您有一点提示,
谢谢
汤姆
答案 0 :(得分:0)
请将您的服务代码修改为
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
})
答案 1 :(得分:0)
谢谢,对我来说是个很大的帮助。我以几乎相同的方式尝试了此操作,但是在您的帮助下,我找到了该服务的解决方案,不得不将其更改为:
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);
必须将any用于data属性。没有我,我总是会遇到类似的错误
如果我试图从数据中获取某些值-data.location,则“对象”类型上不存在“位置”属性。尝试使用界面进行操作,但仍然出现错误,因此我采用了最简单的方法进行操作,并且有效。
但是我仍然想起带有界面的部分,我稍后会再试。