Кто-нибудь успешно внедрил сервер 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);
}
};