引用Git:https://github.com/devellopah/dark-sky-proxy
我对这里显示的很多概念都很陌生,并且已经非常接近,但似乎无法解决这最后一步:
DarkSky的api设置为禁止通过JQ-> getJson进行直接API调用,因为它们的CORS策略(保护API密钥,有意义)
因此,我正在完成基于上面的git设置代理的过程。我在heroku工作,这很酷,并且当我转到我的代理URL时获得默认的日期时间,所以看起来这是正确设置的。
我遇到的问题是,URL上没有任何指令可以调用以使这个简单的工具工作。
请参阅下面的代码,这是我认为最相关的整个文件。最相关的行从comment:// DarkSky API开始
我已经尝试了大量的URL,但我认为问题是缺少关于Node.js的知识(我对此知之甚少,对不起,如果这是一个非常愚蠢的问题)
从浏览器我尝试过:
也尝试从chrome控制台:
当我转到网址的根目录时,我得到了正确的:
但是,当试图让它真正起作用时,所有上述URL和试验都返回相同:
问题:有人可以帮我理解我在这里缺少的是什么吗?我希望有相关的资料来阅读我所遗漏的任何知识。
感谢您阅读这篇文章的时间!
这里相关文件的源代码:
// load environment variables from .env file
require('dotenv').config()
const path = require('path')
const express = require('express')
const favicon = require('serve-favicon')
const cors = require('cors')
const DarkSky = require('dark-sky')
const RateLimit = require('express-rate-limit');
const app = express()
app.use(cors())
app.use(favicon(path.join(process.cwd(), 'favicon.ico')))
app.set('port', process.env.PORT || 3000)
app.enable('trust proxy')
const sleep = 600000; // 10 minutes
// the weather doesn't change too often
const limiter = new RateLimit({
windowMs: sleep,
max: 10, // limit each IP to 1 requests per windowMs
delayMs: 0 // disable delaying - full speed until the max limit is reached
})
// Home
app.get('/', (req, res) => {
res.send(`<div>Current time is: ${ new Date().toLocaleString() }</div>`)
})
// DarkSky API
const forecast = new DarkSky(process.env.API_KEY)
app.get('/api/v1/json', limiter, (req, res) => {
const { lat, lon, units } = req.query
forecast
.latitude(lat)
.longitude(lon)
.units(units)
.language('en')
.exclude('minutely,hourly,daily,alerts,flags')
.get()
.then(weather => res.status(200).json(weather))
.catch(error => res.send(error))
})
app.listen(
app.get('port'),
() => console.log(`Server is listening at port ${app.get('port')}`)
)
弄清楚了!
引用了一个查询字符串组件,它将我送到了学习之路。
这是格式,对于将来遇到这种情况的任何人:
https://MyURL.herokuapp.com/api/v1/json?lat=42.1234&lon=-117.1234&units=[2lettercountrycode]