使用 apollo-server-express 迁移到 3.5.0

Posted

技术标签:

【中文标题】使用 apollo-server-express 迁移到 3.5.0【英文标题】:Migrating to 3.5.0 with apollo-server-express 【发布时间】:2021-12-20 16:56:56 【问题描述】:

我正在尝试将我的一个项目的版本从节点 12.x.x 更新到节点.14.x.x。 现在我看到了 apollo 迁移到 v3 的文档,但完全不清楚有人知道从哪里开始?从头开始制作所有的阿波罗零件系统会更容易吗? 应更新的当前文件:

const  ApolloServer  = require('apollo-server-express');
const  makeExecutableSchema  = require('graphql-tools');
const  applyMiddleware  = require('graphql-middleware');
const  gql  = require('apollo-server-express');
const  resolvers, typeDefs  = require('graphql-scalars');

const  types  = require('./typedefs/types');
const  inputs  = require('./typedefs/inputs');
const  queries  = require('./typedefs/queries');
const  mutations  = require('./typedefs/mutations');

const customResolvers = require('./resolvers');
const  permissions  = require('./permissions/permissions');

const graphqlApis = gql`
  $types
  $queries
  $inputs
  $mutations
`;

const schema = makeExecutableSchema(
  typeDefs: [...typeDefs, graphqlApis],
  resolvers: 
    ...customResolvers,
    ...resolvers,
  ,
);

const server = new ApolloServer(
  context: ( req ) => 
    const headers = req.headers || '';
    return headers;
  ,
  schema: applyMiddleware(schema, permissions),
);

module.exports = server;
尝试运行时的当前错误:Error: You must 'await server.start()' before calling 'server.applyMiddleware()'

我只是想获得一些解决方案/帮助/见解。

【问题讨论】:

【参考方案1】:

如文档中所述,您需要用异步函数包围您的代码 https://www.apollographql.com/docs/apollo-server/migration/

    (async function () 
       // ....
    )();

或者像这样:... 首先定义你的 typeDefs 和解析器

const typeDefs = "" // your typedefs here
const resolvers = "" // your resolvers here
async function startApolloServer(typeDefs, resolvers) 
  // Apollo Express 3.5.x code goes here
  // ....
  await server.start();
 // promise resolve...

startApolloServer(typeDefs, resolvers)

【讨论】:

是的,最后我做了类似的事情,谢谢。 欢迎......我一开始也被困在那里:)

以上是关于使用 apollo-server-express 迁移到 3.5.0的主要内容,如果未能解决你的问题,请参考以下文章

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

在 apollo-server-express 中增加身体限制大小

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

使用 apollo-server-express 迁移到 3.5.0

Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接

如何选择性地允许 apollo-server-express 中的查询?