Внедрение шлюза Apollo Federation с использованием Express Framework
В настоящее время я работаю над POC для реализации шлюза Apollo Federation и экспресс-приложения NodeJS +. До сих пор я не встречал примеров того, как это правильно сделать. Пока что я столкнулся с проблемой, когда модуль ApolloServer не распознает экземплярApolloGateway
от @apollo/gateway
. Я использую экземпляр ApolloServer в качестве оболочки для экземпляра шлюза, как показано в руководстве: https://www.apollographql.com/docs/apollo-server/federation/implementing/. Однако я столкнулся с проблемой при вызовеserver.applyMiddleWare()
в моем экспресс-приложении. Я наткнулся на пример с https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-express
чтобы быть конкретным, вот фрагмент журнала ошибок:
$ node --use_strict ./bin/www
/Users/evanlee/dev/federation-gateway/node_modules/loglevel-debug/index.js:32
target[k] = attr.bind ? attr.bind(k) : attr;
^
TypeError: Cannot assign to read only property 'name' of function 'function() {
return log.debug.apply(this, arguments);
}'
at /Users/evanlee/dev/federation-gateway/node_modules/loglevel-debug/index.js:32:15
at Array.forEach (<anonymous>)
at composit (/Users/evanlee/dev/federation-gateway/node_modules/loglevel-debug/index.js:30:20)
at Object.loglevelDebug [as default] (/Users/evanlee/dev/federation-gateway/node_modules/loglevel-debug/index.js:201:3)
at new ApolloGateway (/Users/evanlee/dev/federation-gateway/node_modules/@apollo/gateway/dist/index.js:101:33)
at Object.<anonymous> (/Users/evanlee/dev/federation-gateway/app.js:21:12)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
error Command failed with exit code 1.
и вот как я пытаюсь интегрировать ApolloServer в свое экспресс-приложение:
const { ApolloServer } = require('apollo-server');
const { ApolloGateway } = require('@apollo/gateway');
const app = express();
// Apollo Server and Gateway definition
const server = new ApolloServer({
gateway: new ApolloGateway({
debug: true,
serviceList: [
{ name: 'base-app', url: 'http://localhost:4001/graphql' },
]
}),
subscriptions: false,
});
server.applyMiddleware({ app, path: '/graphql' });
очень признателен за помощь!
1 ответ
У меня работает последняя версия. Однако я не используюdebug: true
попробовать без?