Как включить 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.

Другие вопросы по тегам