首页 > 解决方案 > 如何访问我的 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 但我无法从那里访问它。我该怎么做?

标签: javascriptnode.jsapi

解决方案


两件事情。一,从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,
    })
})

推荐阅读