使用 Express 框架实现 Apollo Federation 网关

Posted

技术标签:

【中文标题】使用 Express 框架实现 Apollo Federation 网关【英文标题】:Implementing Apollo Federation gateway using Express Framework 【发布时间】:2020-06-17 13:23:51 【问题描述】:

我目前正在开发一个 POC,以在 NodeJS + express 应用程序中实现 Apollo Federation 网关。到目前为止,我还没有真正遇到任何关于如何正确执行此操作的示例。 到目前为止,我遇到了一个问题,即 ApolloServer 模块无法识别来自@apollo/gatewayApolloGateway 实例。我使用 ApolloServer 实例作为网关实例的包装器,如教程所示:https://www.apollographql.com/docs/apollo-server/federation/implementing/#defining-the-gateway。但是,在我的快递应用程序中调用server.applyMiddleWare() 时遇到了问题。我从https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-express#express看到了这个例子

这里具体来说是错误日志的sn-p:

$ 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 集成到我的 express 应用程序的方式:

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试试不?

【讨论】:

以上是关于使用 Express 框架实现 Apollo Federation 网关的主要内容,如果未能解决你的问题,请参考以下文章

在 Apollo v3 React 客户端 fe-retching 不同查询的情况下如何实现乐观 UI

如何使用 Express 和 Apollo-Server 获取 HTTP 授权标头

是否可以将 apollo-server-express 部署到 lambda?

使用 ApolloClient 和 Apollo-Server-Express 处理 GraphQL 错误

使用 apollo-server-express 迁移到 3.5.0

Apollo-Server-Express 未收到上传对象