2017-01-09 10 views
1

У меня есть огромная проблема с модулем graphql-server-hapi, который я должен использовать. Все работает, пока я не буду запрашивать свой API из браузера с CORS.Apollo Server HAPI CORS prefetch не работает

Вот конфигурация регистра:

register : GraphQLServer.graphqlHapi, 
options : { 
    path : '/graphql', 
    graphqlOptions : { 
     schema : Schema, 
     graphiql : true 
    }, 
    route : { 
     cors : true 
    } 
} 

Все нормально с POST запросов, я бегу с Почтальон на локальном хосте, но когда я хочу запустить OPTIONS запрос (как браузер будет делать), я получил 404 с ошибкой на Access-Control-Request-Method:

{ 
    "statusCode": 404, 
    "error": "Not Found", 
    "message": "CORS error: Missing Access-Control-Request-Method header" 
} 

Я искал везде, но никто, кажется, столкнулись с такой проблемой, прежде чем меня (?!). Официальная документация говорит cors : true достаточно, чтобы позволить CORS ...

Я попытался вручную добавить метод OPTIONS на опции регистра, без какого-либо эффекта.

Благодарим за помощь!

+1

вы пробовали 'server.connection ({routes: {cors: true}});' где вы создаете свой сервер? – Ankh

+0

Да, конечно: я устанавливаю 'cors: true' в определении соединения и в опции register graph. Хотя мне интересно, есть ли способ заставить graphql принять метод «ОПЦИИ», чтобы CORS мог работать. –

+0

Глупый вопрос снова, но когда вы сделали запрос «ОПЦИИ» в почтальоне, вы действительно включили заголовок 'Access-Control-Request-Method' с запросом? – Ankh

ответ

1

Я, наконец, нашел решение!

Это было так просто, я просто должен был добавить следующее:

server.route({ 
    method : 'OPTIONS', 
    path : '/graphql', 
    handler : (request, reply) => { 
     reply({ ok : true }) 
      .header('Access-Control-Allow-Methods', 'POST') 
    } 
}) 

Добавляя ручной OPTIONS управления, он посылает 200 и браузер может послать запрос POST :)