Ссылка на Git: https://github.com/devellopah/dark-sky-proxy
Я довольно новичок во многих концепциях, показанных здесь, и довольно близко подошел, но не могу решить этот последний шаг:
API DarkSky настроен на запрет прямых вызовов API через JQ-> getJson из-за их CORS-политики (для защиты ключа API имеет смысл)
В связи с этим я работаю над процессом настройки прокси-сервера на основе приведенного выше git. У меня это работает на heroku, что круто, и я получаю дату и время по умолчанию, когда я захожу на свой прокси-URL, так что, похоже, все настроено правильно.
Проблема, с которой я сталкиваюсь, заключается в том, что в URL нет никаких инструкций для вызова этого простого инструмента.
См. Ниже код, который является целым файлом, который я считаю наиболее актуальным. Наиболее релевантная строка начинается с комментария:
// DarkSky API
Я перепробовал целый ряд URL-адресов, но я думаю, что проблема заключается в нехватке знаний о Node.js (о котором я знаю очень мало, извините, если это супер тупой вопрос)
Из браузера, который я пробовал:
Также пробовал с хромовой консоли:
Когда я иду в корень URL, я получаю правильное:
- Текущее время: 06.04.2009, 17:24:31
Однако, когда вы пытаетесь заставить это работать, все вышеперечисленные 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')}`)
)