使用 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 迁移到 3.5.0