Нет заголовка Access-Control-Allow-Origin 'отсутствует в запрошенной ошибке ресурса в настольном приложении Reaction-redux - PullRequest
0 голосов
/ 20 февраля 2019

Я получаю данные из API, но это не сработало.Это дает мне ошибку вроде " Access to fetch at 'http://muslimsalat.com/lahore/false/5.json?key=16136aac38462c1115dd823d31f4d203' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. "

Когда я получаю данные на реагирующем мобильном телефоне, это работает, но когда я получаю данные на реагирующем рабочем столе, то это не работает.

Может кто-нибудь сказатьмне, что является причиной этой ошибки и как я могу ее решить?

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

CORS - это механизм, в котором домен может указать, какие другие домены могут сделать запрос к нему.По умолчанию заголовок Access-Control-Allow-Origin отсутствует, что означает, что, например, сценарий на stackoverflow.com не может вызвать google.com:

fetch('https://www.google.com')
  .then(console.log)
  .catch(console.error)
// Error: Failed to fetch

Именно поэтому приложение React, которое запускает в виде скрипта , не может получить большую часть контента в Интернете.

Однако , приложение React Native запускается как приложение , а не как сценарий, поэтому CORS на него не влияет.

0 голосов
/ 20 февраля 2019

Если у вас нет прямого доступа к серверу, вы можете использовать Node.js в качестве прокси-сервера и установить там заголовки cors или использовать библиотеку типа 'cors'.

const express = require('express');
const app = express();
const cors = require('cors');

app.use(cors());

app.get('/someEndpoint', (req, res) => {
  //OR you can use headers like this:

  const headers = new Headers();
  headers.append("Access-Control-Allow-Origin", "*");

  fetch(http://muslimsalat.com/lahore/false/5.json?key=16136aac38462c1115dd823d31f4d203, {
        method: 'GET',
        headers: headers
   })
  .then((response) => response.json());
  .then((response) => res.send(response));
})

const server = app.listen(3000, function() {
console.log(new Date().toISOString() + ": server started on port 3000");
});

Затем в приложении реакции вы отправите запрос на получение: 3000 / someEndpoint.

0 голосов
/ 20 февраля 2019

Добавьте CORS в URL API.Вам нужно просто добавить свой локальный IP-адрес в бэкэнд-сервис (API).Если вам нужен правильный код, чтобы сообщить нам, на каком языке вы используете бэкэнд API.

...