DarkSky Proxy - «Запрос не отправлен. ОШИБКА: отсутствует долгота или широта». - Узел JS запрашивает URL, не уверен, почему не работает - PullRequest
0 голосов
/ 06 апреля 2019

Ссылка на 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')}`)
)

1 Ответ

0 голосов
/ 07 апреля 2019

Разобрался!

Была ссылка на компонент строки запроса, который отправил меня в путь обучения.

Вот формат для всех, кто в будущем столкнется с этим:

https://MyURL.herokuapp.com/api/v1/json?lat=42.1234&lon=-117.1234&units=[2lettercountrycode]

...