Как включить CORS для приложения IBM Code Engine
Я создал приложение Code Engine, которое предоставляет пару API. Его контейнер построен с использованием Cloud Native Buildpack, поэтому я могу исправить проблемы с безопасностью.
Я могу успешно вызывать API-интерфейсы из браузера и из curl, но когда я пытаюсь вызвать API-интерфейсы из приложения React.js, я получаю следующую ошибку:
Access to fetch at '...' 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.
Мне нужно включить cors в моем приложении с кодовым движком, но я не могу определить, как это сделать.
Скелет приложения react.js был создан путем запускаnpx create-react-app
. Я тестирую локальное приложение react.jsnpm start
. Когда он будет готов, он будет построен путем запускаnpm run build
.
Вызов REST к API приложения Code Engine находится в состоянии пожара один разuseEffect
, гдеendpoint
иmethod
являются входными данными для компонента:
useEffect(() => {
if (!endpoint || !method) return;
console.log('Starting');
const appurl = `https://${endpoint}${method}`;
fetch(appurl, {
method: 'GET',
headers: {
"Content-Type": "application/json"
}
})
//.then(response => response.json())
.then(response => console.log(response))
.catch(console.error);
console.log('url is ', appurl);
},[]);
1 ответ
Для запросов POST CORS ваше приложение должно обслуживать предварительный запрос OPTIONS. Может дело в этом? См. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS или другие ресурсы CORS. В частности, для запросов POST вам необходимо предоставить параметры Access-Control-Allow-Headers.
Поскольку приложение Code Engine с API работает на Node.js/Express, все, что нужно сделать, это добавитьcors
как зависимость, затем добавьте
const cors = require('cors');
app.use(cors());
См. https://expressjs.com/en/resources/middleware/cors.html.