Политика CORS, возвращающая заголовок No Access-Control-Allow-Origin ', присутствует на запрошенном ресурсе в Express Шлюз - PullRequest
0 голосов
/ 29 апреля 2020

Я использую Express Шлюз в качестве шлюза API для соединения с внутренним сервером. Мой интерфейс работает на localhost: 3000, а шлюз Express работает на localhost: 8080. Когда я пытаюсь получить доступ к бэкэнду из внешнего интерфейса, в браузере появляется ошибка cors. Однако при использовании почтальона все работает нормально.

Мой gateway.config.yml (только один конвейер)

user:
    apiEndpoints:
      - user
    policies:
      - cors:
        - action:
            origin: "*"
            credentials: true
            methods: ['GET','POST','PUT','DELETE']
            allowedHeaders: ['Content-type','Authorization','Origin','Access-Control-Allow-Origin','Origin', 'Accept', 'X-Requested-With', 'Content-Type', 'Access-Control-Request-Method', 'Access-Control-Request-Headers','Authorization', 'Access-Control-Allow-Origin','X-TEST']
            exposedHeaders : ['Content-type','Authorization','Origin','Access-Control-Allow-Origin','Origin', 'Accept', 'X-Requested-With', 'Content-Type', 'Access-Control-Request-Method', 'Access-Control-Request-Headers','Authorization', 'Access-Control-Allow-Origin','X-TEST']
            preflightContinue: true
      - jwt:
        - action:
            secretOrPublicKey: 'secret'
            checkCredentialExistence: false
      - request-transformer:
        - action:
            body:
              add:
                user: req.user
      - proxy:
        - action:
            serviceEndpoint: noAuthService

Я получаю следующую ошибку.

Access to XMLHttpRequest at 'http://localhost:8080/api/user/31a19f8a-c76d-4051-a944-dad1b676c550' 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.

Любой идея как решить эту проблему ???

1 Ответ

0 голосов
/ 29 апреля 2020

Сообщение об ошибке указывает, что наличие настраиваемого заголовка в запросе инициировало предполетный запрос для проверки права на доступ к CORS, но ваш сервер не ответил соответствующим образом на этот предполетный запрос, поэтому доступ не был предоставлен .

Отлично работает с почтальоном, потому что почтальон не применяет CORS. Браузер поддерживает CORS.

Мой первый вопрос: почему бы вам просто не объединить код шлюза с внешним сервером? Зачем вам нужны два отдельных сервера?

Затем, чтобы обработать запрос перед полетом, вам нужно обработать запрос OPTIONS (вместо GET или POST входящий глагол http - OPTIONS), как показано здесь . Вы можете прочитать о предварительно обработанных запросах здесь и посмотреть некоторые примеры того, как их обрабатывать. В Express вы бы использовали

Если вы используете пакет cors(), вы можете увидеть некоторые примеры обработки перед полетом здесь и здесь .

...