2017-01-09 43 views
1

我有一个很大的问题,我必须使用graphql-server-hapi模块。 一切工作,直到我必须从CORS的浏览器请求我的API。Apollo服务器HAPI CORS预取不起作用

这里的寄存器配置:

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

一切都很好,与POST请求我在本地主机与邮差运行,但是当我要运行一个OPTIONS请求(如浏览器都行)我得到了一个404与访问控制请求,方法错误:

{ 
    "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'放在连接定义和graphql寄存器选项中。虽然我想知道是否有办法强制graphql接受“OPTIONS”方法,因此CORS可以工作。 –

+0

又一次愚蠢的问题,但是当你在postman中做出“OPTIONS”请求时,你是否实际上在请求中包含了“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请求:)