javascript - 如何访问我的 app.js 文件的 api 中的内容?
问题描述
在这个api中,我想访问从 forecast.js 文件到 app.js 文件的图标文件。但我做不到。因为我想在 html 文件中显示图标
API 响应:
{
(...)
"daily":{
"summary":"No precipitation throughout the week, with high temperatures falling to 64°F on Sunday.",
"icon":"clear-day",
"data":[
{
"time":1565766000,
"summary":"Partly cloudy throughout the day.",
"icon":"clear-day",
(...)
"precipProbability":0.02,
(...)
"temperatureMin":62.97,
"temperatureMinTime":1565794800,
"temperatureMax":77.39,
"temperatureMaxTime":1565823600,
(...)
},
(...)
]
},
(...)
}
来自 forecast.js 文件的代码
const request = require('request');
const forecast = (latitude, longitude, callback) => {
const url = 'https://api.darksky.net/forecast/a6e1a451373ac75d8c4ef09f5b06892e/' + latitude + ',' + longitude +'?units=si';
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)
}
callback(undefined, body.daily.data[0].summary + ' It is currently ' + body.daily.data[0].temperatureMax + ' Max degress & ' +body.daily.data[0].temperatureMin +' Min degress. There is a ' + body.daily.data[0].precipProbability
+ '% chance of rain. icon: ' + body.daily.icon );
})
};
module.exports = forecast;
来自 app.js 文件
app.get('/weather', (req,res)=>{
if (!req.query.address){
return res.send({
error:'You must provide an address'
})
}
geocode(req.query.address,(error,{latitude,longitude,location } ={})=>{
if (error){
return res.send({error})
}
forecast(latitude,longitude,(error,forcastData,iconsky)=>{
if (error){
return res.send({error})
}
res.send({
forcast:forcastData,
location,
address: req.query.address,
})
})
})
});
这是 geocode.js 文件
const request = require('request');
const geocode = (address, callback) => {
const url = 'https://api.mapbox.com/geocoding/v5/mapbox.places/' + address +
'.json?access_token=pk.eyJ1Ijoic29sb3JhbmdlciIsImEiOiJjanoxb2RwdGowbmF3M2JrbnA0OGI1Nzd2In0.ZLeKIz5F7OlG5GxVaKZj0g&limit=1';
request({ url, json: true }, (error, {body}) => {
if (error) {
callback('Unable to connect to location services!', undefined)
} else if (body.features.length === 0) {
callback('Unable to find location. Try another search.', undefined)
} else {
callback(undefined, {
latitude: body.features[0].center[0],
longitude: body.features[0].center[1],
location: body.features[0].place_name
})
}
})
};
module.exports = geocode;
我想访问 api 中的图标以在 app.js 中 res.send 但我无法从那里访问它。我该怎么做?
解决方案
两件事情。一,从forecast.js调整你的回调,而不是
callback(undefined, body.daily.data[0].summary + ' It is currently ' + body.daily.data[0].temperatureMax + ' Max degress & ' +body.daily.data[0].temperatureMin +' Min degress. There is a ' + body.daily.data[0].precipProbability
+ '% chance of rain. icon: ' + body.daily.icon );
})
像这样回调:
callback(undefined, body.daily.data[0].summary + ' It is currently ' + body.daily.data[0].temperatureMax + ' Max degress & ' +body.daily.data[0].temperatureMin +' Min degress. There is a ' + body.daily.data[0].precipProbability
+ '% chance of rain.', body.daily.icon );
});
不同之处在于我将 icon 作为第三个参数。
第二,您现在可以在预测调用后在 app.js 中访问它:
forecast(latitude,longitude,(error,forcastData,iconsky)=>{
if (error){
return res.send({error})
}
res.send({
forcast:forcastData,
location,
address: req.query.address,
icon: iconsky,
})
})
推荐阅读
- python - Google Ads API v8 中不存在指定类型“google_ads_failure”
- http - 在 HTTP 重定向上从 URL 中删除哈希
- laravel - 如果搜索为空,则在另一个相关表上记录用户信息
- api - 空手道 - 为每个请求发送自定义标头的好方法
- json - Facebook Graph API 在不同的脚本上返回不同的响应,但相同的 - 非无效 - 令牌
- flutter - flutter build apk --split-per-abi 不会创建三个 APK 文件
- reactjs - 如何添加反应组件
@react-pdf/renderer 的 - python - 确保多线程池中的 SQL 查询顺序
- python - Tensorflow:加载数据时解包错误的值太多
- python - 如何优化熊猫中的数据框迭代?