Ошибка CORS: доступ для извлечения бэкэнда во внешний интерфейс, Graphql (Nodejs, Reactjs) - PullRequest
0 голосов
/ 28 февраля 2020

У меня ошибка: «Доступ к выборке в 'http://localhost: 4000 / ' из источника 'http://localhost: 3000 / ' был заблокирован политикой CORS: В запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Если непрозрачный ответ удовлетворяет ваши потребности, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS ». мой сервер:

import { GraphQLServer } from 'graphql-yoga'
import { prisma } from './generated/prisma-client'
import resolvers from './resolvers'

const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: request => ({
    ...request,
    resolverValidationOptions: { requireResolversForResolveType: false,},
    prisma,
  }),
opt:{
  cors:{
     credentials: true,
     origin:{['http://localhost:3000/']}
}
}
})

server.start(opt,() => console.log(`Server is running on http://localhost:4000`)); 

, а мой клиент:

import { ApolloProvider } from 'react-apollo'
import ApolloClient from 'apollo-client'
import {BrowserRouter} from 'react-router-dom'
import { setContext } from 'apollo-link-context'
import { AUTH_TOKEN } from './constants'
import { createHttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory';
import history from './history';
import { onError } from "apollo-link-error";
import { SnackbarProvider, useSnackbar } from 'notistack';
const httpLink = createHttpLink({
    uri: 'http://localhost:4000/',
});

const authLink = setContext((_, { headers }) => {
    const token = localStorage.getItem(AUTH_TOKEN);
    return {
        headers: {
            'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE,OPTIONS',
            "Access-Control-Allow-Credentials" : true,
            'Access-Control-Allow-Origin': "http://localhost:3000/",
            authorization: token ? `Bearer ${token}` : ''
        }
    }
});
const linkError = onError(({ graphQLErrors, networkError }) => {
    if (graphQLErrors)
        graphQLErrors.map(({ message, locations, path }) =>
            console.log(
                `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`,
            ),
        );

    if (networkError) console.log(`[Network error]: ${networkError}`);
});
const client = new ApolloClient({
    link: authLink.concat(httpLink),
    cache: new InMemoryCache(),linkError,
        fetchOptions: {
          mode: 'cors',
        },
    });

ReactDOM.render(
    <BrowserRouter>
    <ApolloProvider client={client}>
      <SnackbarProvider>
        <App />
       </SnackbarProvider>
    </ApolloProvider>
    </BrowserRouter>,
    document.getElementById('root'),
);

Пожалуйста, помогите мне найти ошибку, я посмотрел другую информацию, и ничего не помогло. Спасибо

...