如何在graphql-yoga/node V2中导入schema与resolvers
graphql-yoga V1 迁移至 V2 方案
核心问题解答
- 基础迁移场景不需要额外引入第三方功能包,仅需调整API调用方式即可,你当前在单文件内维护schema、resolvers的开发模式完全兼容V2版本。
- 注意V2版本将
graphql作为对等依赖,需要手动安装,不属于额外的第三方迁移依赖。
具体迁移步骤
- 卸载旧版本V1包,安装V2版本依赖
npm uninstall graphql-yoga npm install @graphql-yoga/node graphql - 调整代码配置项:V2不再支持直接传入字符串格式的
schema字段,将原schema字符串移至typeDefs字段即可,原有resolvers的写法、入参、业务逻辑完全不需要修改。 - 调整启动逻辑:V2创建的服务实例需要显式调用
start方法指定端口启动。
适配后的完整代码
const { createServer } = require('@graphql-yoga/node') // 原有业务数据保持不变 const posts = [] const users = [] const comments = [] const server = createServer({ typeDefs: `type Query { me: User! posts(query: String): [Post!]! users(query: String): [User!]! comments(query: String): [Comment!]! }`, resolvers:{ Query: { posts(parent, args, ctx, info) { if (!args.query) { return posts; } return posts.filter((post) => { const isTitleMatch = post.title .toLowerCase() .includes(args.query.toLowerCase()); const isBodyMatch = post.body .toLowerCase() .includes(args.query.toLowerCase()); return isTitleMatch || isBodyMatch; }); } } } }) // 启动服务,端口可按需修改 server.start({ port: 4000 }, () => { console.log('GraphQL 服务已启动,访问地址为 http://localhost:4000/graphql') })
补充说明
- V2默认的GraphQL接口路径为
/graphql,和V1默认路径一致,原有客户端请求无需调整。 - Resolver的四个入参
parent/args/context/info规则和V1完全一致,所有业务逻辑可直接复用。 - 后续如果需要实现schema拼接、自定义指令、权限校验等高级能力,再按需引入对应工具包即可,基础运行不需要额外依赖。
内容的提问来源于stack exchange,提问作者user19038939
相关产品推荐
相关产品推荐

