Apollo-сервер - express реализован с федерацией Apollo - PullRequest
0 голосов
/ 22 января 2020

Кто-нибудь успешно внедрил сервер apollo express (в качестве шлюза) вместе с федерацией серверов GraphQL?

Мои средства аутентификации присутствуют через конечную точку REST на моем шлюзе, поэтому я использую сервер apollo- express в качестве верхнего уровня, но при попытке запроса данных он ничего не возвращает из другие услуги. Когда я переключаюсь на то, чтобы шлюз работал как сервер Apollo, он функционирует и может получать данные от сервисов, принадлежащих федерации apollo, к которой он подключен. Но это означает, что я должен игнорировать мою реализацию аутентификации и других конечных точек REST, которые я использую со службой.

Текущая настройка:

const main = async () => {

    try {

    const app = express();

    app.use(function(_req, res, next) {
      res.header("Access-Control-Allow-Origin", `${config.frontend_url}`);
      res.header('Access-Control-Allow-Methods', "GET,HEAD,OPTIONS,POST,PUT");
      res.header("Access-Control-Allow-Credentials", "true");
      res.header('Access-Control-Allow-Headers', "Access-Control-Allow-Origin, Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization");
      next();
    });


    app.use(cookieParser());
    app.use(cookieSession({
      maxAge: 24 * 60 * 60 * 1000,
      keys: [config.cookieKey]
    }));


    app.use('/auth', loginRouter);


    const serviceList = [
      {name: "service", url: config.service_url + "/graphql"},
      {name: "service", url: config.service_url + "/graphql"},
    ]

    const gateway = new ApolloGateway({
      serviceList,
    });

    const { schema, executor } = await gateway.load();

    // const schema = await createSchema();

    app.use(
      '/graphql',
      checkToken,
      graphqlHTTP(req => ({
        schema,
        graphiql: true,
        context: req
      }))
    );

    app.use('/', ((_req, res) => {
      res.sendStatus(200);
    }));


    const apolloServer = new ApolloServer({ schema, executor, playground: true, tracing: false , subscriptions: false}) as any;
    apolloServer.applyMiddleware({ app });
    app.listen(config.port, () => {
      console.log(`? Server ready at api.backoffice.myos.co:${config.port}${apolloServer.graphqlPath}`)
    });

  } catch (e) {
    Logger.error(">>> >>> >>> createSchema() error:", e);
  }

};
...