CORS设置将被忽略

时间:2019-03-17 10:03:28

标签: node.js cors apollo-client next.js

node.js出现问题,显然是忽略了我的cors设置。 这是我的仓库: Backend Frontend

后端的罪魁祸首代码:

...
//config.CLIENT_URL is 'http://localhost:3000'

const corsOptions: cors.CorsOptions = {
        origin: [String(config.CLIENT_URL)],
        credentials: true,
    };
    app.use(cors(corsOptions));
...

阿波罗实施

//config.BACKEND_URL_DEV is 'http://localhost:4000/graphql/'
function create (initialState, { getToken }) {
  const httpLink = createHttpLink({
    credentials: "include",
  uri: `${config.BACKEND_URL_DEV}`,
  })

  const authLink = setContext((_, { headers }) => {
    let token = getToken()
    return {
      headers: {
        ...headers,
        cookie: token ? token : ''
      }
    }
  })

  return new ApolloClient({
    connectToDevTools: process.browser,
    ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once)
    link: authLink.concat(httpLink),
    cache: new InMemoryCache().restore(initialState || {})
  })
}

当我进入http://localhost:3000/dashboard时,如果我通过graphql playground登录,我将执行查询,这是我收到的消息:

enter image description here

接收到足够多的数据,但CORS阻止了它的显示。 在Opera,Chrome和Firefox DevEdition上进行了测试

enter image description here

如果请求源域正确,看来我的后端正在将*设置为Access-Control-Allow-Origin

enter image description here

对此事有任何见识,不胜感激!

1 个答案:

答案 0 :(得分:1)

原来的问题是将cors配置传递给apollo-server-express,因为app.use(cors(corsOptions))对于这种设置实际上没有任何作用。

正确答案: 将cors config移至此部分:

apolloServer.applyMiddleware({ app, cors: corsOptions });

找到了答案,感谢stack thread