Проблемы с CORS при использовании запроса на выборку для вызова Amazon Web Services CloudSearch - PullRequest
0 голосов
/ 13 марта 2020

В настоящее время я работаю над поисковым вводом, который будет запрашивать базу данных пользователей AWS. Клиент предоставил мне конечную точку cloudsearch, и все отлично работает в почтальоне, возвращая правильного пользователя с 200.

Однако в моем приложении create-реагировать, используя хуки, мой запрос на выборку возвращает следующее .. ..

от источника 'http://localhost: 3000 ' заблокировано политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: у него нет HTTP ok status.

Мой запрос на выборку ниже ...

const getUsers = async (query) => {
const results = await fetch(`https://search-****-*****.eu-west1.cloudsearch.amazonaws.com/2013-01-01/search?q=${query}`, {

            headers: {
                'Content-Type': 'application/json', 
                'Access-Control-Allow-Origin': '*'
          }
        })
        const userData = await results.json()
        return userData.results
    }

У меня есть плагин CORS chrome, который включен, но, похоже, ничего не меняет , Я хочу убедиться, что могу разрешить запрос, обеспечивая безопасность моего вызова API.

Буду признателен за любой совет.

Спасибо!

РЕДАКТИРОВАТЬ

Добавлено на сервере express на порту 3005, а затем заменить это в моем запросе на выборку ...

app.get('/search', function(req, res, query){ 
    request(`https://search-***-***.eu-west-1.cloudsearch.amazonaws.com/2013-01-01/search?q=`, function (error, response, body) { 
      if (!error && response.statusCode === 200) { 
        console.log(body); 
        res.send(body); 
      } 
     }); 
  });

, а затем обновить мой запрос на выборку следующим образом ...

const getUsers = async (query) => {
        const results = await fetch(`http://localhost:3005/search` + `${query}`)      
        const userData = await results.json()
        console.log(results);

        return userData.results
    }

Однако, хотя этот подход работает, если запрос жестко запрограммирован в файле express, он возвращает пустой ответ, если запрос передается на стороне выборки. Есть ли необходимость в дальнейшей настройке?

Это вывод результатов в консоли

type: "cors"
url: "http://localhost:3005/search?un"
redirected: false
status: 200
ok: true
statusText: "OK"
headers: Headers {}
body: (...)
bodyUsed: true
__proto__: Response

1 Ответ

0 голосов
/ 13 марта 2020

Причина:

Это ограничение API-интерфейса, который вы вызываете из-за соображений безопасности, не допускается попадание интерфейсного кода в API.

Невозможно наложить API-ключ на код клиента, поскольку он может быть легко доступен через браузер.

Решение:

Вы можете создать express сервер, который будет выступать в качестве прокси-сервера для вас, из вашего внешнего кода вы попадете на этот прокси-сервер и этот прокси-сервер получит нужный API и получит ответ за вас.

Эта статья полезна.

...