Неподдерживаемый тип контента с движком GraphIql apollo - PullRequest
0 голосов
/ 28 мая 2018

Я использую apollo-server-express, и все работает нормально.У меня есть 2 конечные точки - 1 для graphiql (/ graphql) и одна для неинтерактивных (/ client) запросов (я знаю - они назывались так до того, как я начал с apollo).

 app.use('/client', bodyParser.json() ,  
  (req, res,next) => {
    const context = { pool , apiKey:req.query.key , bidules };
    if (server.isAuthorized(context.apiKey)) {
      return graphqlExpress({
        schema: schema,
        context: context,
        tracing: true,
        cacheControl: {
          defaultMaxAge: 30,
        }
      }) (req,res,next); 
    }
    else {
      res.setHeader('Content-Type', 'application/json');
      res.status(403)
      .send (JSON.stringify({
        errors:[ {message: "api key is unauthorized"} ]
      })); 
    }
  }
);

// endpoint for browser graphIQL
app.use('/graphql',  graphiqlExpress({ 
  endpointURL: '/client' 
}));


app.use("/schema", (req, res) => {
  res.set("Content-Type", "text/plain");
  res.send(printSchema(schema));
});

Но когдаЯ представляю движок apollo

engine.listen({
  port: port,
  expressApp: fidserver.app,
  graphqlPaths: ['/graphql', '/client']
});

все по-прежнему работает нормально - за исключением случаев, когда я обновляю graphiql в браузере с запросом в качестве параметров в URL браузера.

Затем я получаю эту ошибку

{"errors":[{"message":"Unsupported Content-Type from origin: text/html"}]}

То же самое при работе двигателя apollo не вызывает ошибку.Если снова выполнить запрос или обновить браузер без параметров запроса и переменных, все работает нормально, с включенным или не включенным Apollo Engine.

При возникновении ошибки я вижу из журнала сервера, что он пытается вернутьотреагировать веб-страницу, содержащую некоторый javascript для декодирования параметров откуда-то, но я не могу отследить откуда - это не так далеко, как попадание в любой мой код.

1 Ответ

0 голосов
/ 31 мая 2018

Это решили ребята из Аполлона.Вот ответ - мне не следовало упоминать конечную точку graphIQL в опциях engine.listen.

Механизм должен размещаться только между клиентом и конечной точкой сервера GraphQL.Попробуйте конфиг как это:

engine.listen({
  port: port,
  expressApp: fidserver.app,
  graphqlPaths: ['/client'] // removed "graphql"
});
...