Хапи - включение CORS - PullRequest
0 голосов
/ 30 июня 2018

Я пишу BE-приложение, используя Node JS и Hapi (v17). Пока сервер работает, и я пытаюсь вызвать конечную точку, используя метод POST, я получаю сообщение об ошибке:

Failed to load http://localhost:8001/login: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

Я хотел включить CORS на сайте сервера, но у меня ничего не работает.

вот как я включаю CORS на сайте сервера:

const hapi = require('hapi')

const server = hapi.server({
    port: 8001,
    host: 'localhost',
    routes: { 
        cors: true
    } 
})

Я также пытался включить cors для определенного маршрута, но это также не имеет никакого эффекта:

server.route({
        method: 'POST',
        path: '/login',
        config: {
            cors: {
                origin: ['*'],
                additionalHeaders: ['cache-control', 'x-requested-with']
            }
        },
        handler: async (request, reply) => {
            return User.login(request, reply)
        }
    })

Кто-нибудь знает, что мне следует сделать, чтобы включить CORS и избавиться от проблемы?

Кроме того, на вкладке сети браузера есть скриншот:

enter image description here

EDIT:

Я добавил маршрут, который обрабатывает метод OPTIONS, и теперь у меня есть другая проблема.

Failed to load http://localhost:8001/login: Request header field access-control-allow-credentials is not allowed by Access-Control-Allow-Headers in preflight response.

А вот как все выглядит на вкладке сети:

enter image description here

1 Ответ

0 голосов
/ 13 марта 2019
cors: {
            origin: [
                '*'
            ],
            headers: ["Access-Control-Allow-Headers", "Access-Control-Allow-Origin","Accept", "Authorization", "Content-Type", "If-None-Match", "Accept-language"],
            additionalHeaders: ["Access-Control-Allow-Headers: Origin, Content-Type, x-ms-request-id , Authorization"],
            credentials: true
        }

Вы также, вероятно, должны определить квалифицированный домен, а не просто * подстановочный знак

...