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
登录,我将执行查询,这是我收到的消息:
接收到足够多的数据,但CORS阻止了它的显示。 在Opera,Chrome和Firefox DevEdition上进行了测试
如果请求源域正确,看来我的后端正在将*
设置为Access-Control-Allow-Origin
。
对此事有任何见识,不胜感激!
答案 0 :(得分:1)
原来的问题是将cors
配置传递给apollo-server-express
,因为app.use(cors(corsOptions))
对于这种设置实际上没有任何作用。
正确答案: 将cors config移至此部分:
apolloServer.applyMiddleware({ app, cors: corsOptions });
找到了答案,感谢stack thread