Здесь Maps Geocode API приводит к ошибке Cross-Origin - PullRequest
0 голосов
/ 29 мая 2020

Я использую первый пример здесь, чтобы получить географические координаты на основе адреса: https://developer.here.com/documentation/maps/3.1.15.1/dev_guide/topics/geocoding.html

Моя JavaScript кодировка выглядит почти так же, как в официальной документации :

var platform = new H.service.Platform({
  'apikey': 'HERE IS MY API KEY'
});

// Get an instance of the geocoding service:
var service = platform.getSearchService();

service.geocode({
  q: 'Berlin'
}, (result) => {
  result.items.forEach((item) => {
    console.log("test");
  });
}, alert);

Однако при отправке запроса на геокодирование я получаю следующую ошибку:

Access to XMLHttpRequest at '**https://geocode.search.hereapi.com/v1/geocode?xnlp=CL_JSMv3.1.16.1&apikey=[HERE IS MY API KEY]&q=Berlin**' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Ключ API отправлен правильно, почему я все еще получаю ошибку CORS? Если я ввожу URL-адрес запроса вручную в браузере, я получаю ответ, и все в порядке.

Ответы [ 2 ]

0 голосов
/ 02 июня 2020

Да, сервер поможет с вопросом. Я здесь, чтобы предложить альтернативу.

Вы можете выполнить геокодирование с помощью HERE Maps REST, а также см. Документы - https://developer.here.com/documentation/geocoding-search-api/dev_guide/topics/endpoint-geocode-brief.html.

Поскольку не все браузеры исторически поддерживают CORS (подробнее о CORS - https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) есть подход, называемый JSONP. См. Объяснение JSONP здесь. Карты, относящиеся к старым документам https://developer.here.com/documentation/places/dev_guide/topics/request-cross-domain-js.html.

В конце концов, пакет https://www.npmjs.com/package/jsonp npm может стать хорошим продолжением, и мы можно получить что-то подобное после установки пакета (npm install jsonp --save).

import jsonp from 'jsonp';


jsonp('https://geocode.search.hereapi.com/v1/geocode?q=5+Rue+Daunou%2C+75000+Paris%2C+France&apiKey=my-api-key', 
null, 
(err, data) => {
  if (err) {
    console.error(err.message);
  } else {
    console.log(data);
  }
});

По моему опыту, это отлично работает.

0 голосов
/ 29 мая 2020

Если вы тестируете этот код, открывая файл в браузере, вы можете получить эту ошибку. Я предлагаю использовать для тестирования локальный сервер.

...