2017-01-09 3 views
1

Ich habe ein großes Problem mit dem graphql-server-hapi Modul, das ich verwenden muss. Alles funktioniert, bis ich meine API von einem Browser mit CORS anfordern muss.Apollo Server HAPI CORS Prefetch funktioniert nicht

Hier ist die Registerkonfiguration:

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

Alles ist in Ordnung mit den POST Anfragen, die ich mit Postman auf localhost laufen, aber wenn ich will eine OPTIONS Anfrage bekam ich einen 404 (wie der Browser tun wird) laufen mit einem Fehler auf Access-Control-Request-Methode:

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

ich suchte überall, aber niemand scheint vor mir, dieses Problem zu begegnen (?!). Die offizielle Dokumentation sagt die cors : true genug ist CORS zu ermöglichen ...

Ich versuche, die OPTIONS Methode auf den Registern Optionen manuell hinzuzufügen, ohne Wirkung.

Danke für Ihre Hilfe!

+1

Haben Sie versucht, 'server.connection ({routes: {cors: true}});' wo auch immer Sie Ihren Server erstellen? – Ankh

+0

Ja natürlich: Ich habe die 'cors: true' in der Verbindungsdefinition und in der graphql-Registeroption angegeben. Obwohl ich mich frage, ob es eine Möglichkeit gibt, graphql zu zwingen, die 'OPTIONS'-Methode zu akzeptieren, damit das CORS funktionieren kann. –

+0

Silly Frage wieder, aber wenn Sie die 'OPTIONS' Anfrage im Postboten gemacht haben Sie tatsächlich die' Access-Control-Request-Methode' Header mit der Anfrage? – Ankh

Antwort

1

Ich habe endlich die Lösung gefunden!

Dies war so einfach, ich dies nur hatte hinzuzufügen:

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

Durch das Hinzufügen der manuellen OPTIONS Management, sendet er eine 200 und der Browser die POST-Anfrage schicken :)

Verwandte Themen