Доступ к Algolia REST API через JavaScript: ошибки CORS - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь получить доступ к Algolia REST API напрямую через запрос JavaScript fetch. Я могу успешно сделать запрос в curl, но при переводе на JavaScript я получаю ошибки CORS.

Это мой код:

    const API_KEY = 'my_api_key';
    const APP_ID = 'my_app_id';
    const url = `https://${APP_ID}-dsn.algolia.net`;
    const query = 'my_query';
    const data = {
      params: `query=${query}&hitsPerPage=1`
    };

    fetch(url, {
      method: 'POST',
      body: JSON.stringify(data),
      mode: 'cors',
      headers: new Headers({
        'Accept': 'application/json',
        'Content-Type': 'application/json; charset=UTF-8',
        'X-Algolia-API-Key': API_KEY,
        'X-Algolia-Application-Id': APP_ID
      })
    }).then(res => res.json())
      .catch(error => console.error('Error:', error))
      .then(response => console.log('Success:', response));

А это ошибки CORS:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://my_app_id-dsn.algolia.net/. (Reason: CORS request external redirect not allowed).
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://my_app_id-dsn.algolia.net/. (Reason: CORS preflight channel did not succeed).
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://my_app_id-dsn.algolia.net/. (Reason: CORS request did not succeed).

Я чувствую, что что-то действительно очевидное мне не хватает. Любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Понял: я делал глупую ошибку. Algolia использует другой URL-путь для запроса POST и GET, и в любом случае я использовал неправильный путь.

Для записи рабочий код точно такой же, как указано выше, за исключением этого шаблона URL

const url = `https://${APP_ID}-dsn.algolia.net/1/indexes/${MY_INDEX}/query`;

Спасибо всем!

0 голосов
/ 10 мая 2018

Вы должны использовать клиент Algolia JS, он не только имеет дело с этими особенностями, но также и с повторной попыткой в ​​случае сбоя любого из трех хостов. Он доступен в виде пакета «algoliasearch» на npm или через cdn.

Не стесняйтесь спрашивать больше о том, что делает клиент API, в настоящее время я один из сопровождающих.

0 голосов
/ 09 мая 2018

Попробуйте использовать jsonp

$.ajax({
  method: 'GET',
  url: api_url,
  dataType: 'jsonp', //change the datatype to 'jsonp' works in most cases
  success: (res) => {
   console.log(res);
  }
})

Другой способ - использовать какой-либо прокси-сервис. Вот один https://crossorigin.me/

...