Установка тестового заголовка в GraphQL Playground, который я хочу использовать, вызывает «Сервер не может быть достигнут» - PullRequest
0 голосов
/ 21 декабря 2018

Итак, я создал кучу мутаций и запросов и соединил их вместе, что работает, и хотел ввести аутентификацию в микс.Я добавил заголовок HTTP «x-token» для хранения моего токена входа, чтобы иметь возможность удалять такие вещи, как их работа или самого пользователя.

const getMe = async req => {
  const token = req.headers['x-token'];

  if (token) {
    try {
      return await jwt.verify(token, "notSoSecret");
    } catch (e) {
      throw new AuthenticationError(
        'Your session expired. Sign in again.',
      );
    }
    }
  };

  const server = new ApolloServer({
    typeDefs: schema,
    resolvers,
    formatError: error => {
      // remove the internal sequelize error message
      // leave only the important validation error
      const message = error.message
        .replace('SequelizeValidationError: ', '')
        .replace('Validation error: ', '');

      return {
        ...error,
        message,
      };
    },
    context: async ({ req }) => {
      const me = await getMe(req);

      return {
        models,
        me,
        secret: "notSoSecret",
      }
    },
    path: "/graphql"
  });

  server.applyMiddleware({ app });


  sequelize.sync().then(async () => {
     createUsersWithJob();
  });

  app.get("/playground", graphiql({ endpoint: "/graphql" }));
  const handler = serverless(app);
  export { handler };

  const createUsersWithJob = ... //creates seed data

Поэтому, когда я добавляю токен, я просматриваюВ консоли командной строки я вижу, что устанавливаю нужный заголовок, но он повторяется снова и снова и не останавливается.Также игровая площадка получает ошибку «Сервер не может быть достигнут»

{
  "error": "Response not successful: Received status code 400"
}

, и выполнение мутации deleteUser не работает, или любая другая мутация и запрос по этому вопросу, пока я не удалю заголовок HTTP, который я установил на детской площадке.

Существует вторичная проблема, при которой все в этом корневом файле выполняется дважды, но на данный момент это не так уж важно для меня, как обрисовано в заголовке.

Если кто-либо имеет какое-либо представление об этом,Я хотел бы знать больше.Заранее спасибо.

edit: просто быстрое редактирование, чтобы сказать, что оно отлично работает, когда я жестко кодирую уже существующего пользователя.

1 Ответ

0 голосов
/ 09 февраля 2019

Мне было очень трудно заставить React-версию GraphQL Playground работать в очень простой html-настройке, но я понял кое-что, что может вам помочь (скрестив пальцы).

Я добавил headers раздел конфигурации в вызове GraphQLPlayground.init, например так:

const root = document.getElementById('root');
GraphQLPlayground.init(root, {
  endpoint: "/graphql",
  headers: {
    "Authorization": "Bearer " + token
  }
})

У меня есть элемент с идентификатором root, поскольку он встроен в HTML.

Не уверенэто поможет вам, хотя, как я только что заметил из вашего примера кода, вы называете graphiql, который отличается от клиента GraphQL от GraphQL Playground.

GraphIQL: https://github.com/skevy/graphiql-app
GraphQL Playground: https://github.com/prisma/graphql-playground

...