Javascript Can';t获取Graphql工具以读取我的schema.Graphql文件

Javascript Can';t获取Graphql工具以读取我的schema.Graphql文件,javascript,graphql,apollo-server,graphql-tools,Javascript,Graphql,Apollo Server,Graphql Tools,我正在使用Apollo server express和Graphql工具。我已经阅读了所有的Graphql工具文档,但我无法让它正常工作。我正在尝试将schema.graphql文件作为typeDefs导入。看起来Graphql工具应该使这变得容易,但有些东西还没有到位 index.js const { ApolloServer } = require("apollo-server-express"); const { makeExecutableSchema } = req

我正在使用Apollo server express和Graphql工具。我已经阅读了所有的Graphql工具文档,但我无法让它正常工作。我正在尝试将schema.graphql文件作为typeDefs导入。看起来Graphql工具应该使这变得容易,但有些东西还没有到位

index.js

const { ApolloServer } = require("apollo-server-express");
const { makeExecutableSchema } = require('@graphql-tools/schema');
const express = require("express");
const { join } = require("path");
const { loadSchema } = require("@graphql-tools/load");
const { GraphQLFileLoader } = require("@graphql-tools/graphql-file-loader");
const { addResolversToSchema } = require("@graphql-tools/schema");
const app = express();

const resolvers = {
  Query: {
    items: (parent, args, ctx, info) => {
      return ctx.prisma.item.findMany();
    },
  },
  Mutation: {
    makeItem: (parent, args, context, info) => {
      const newItem = context.prisma.item.create({
        data: {
          ...args,
          price: parseInt(Math.ceil(args.price * 100)),
        },
      });
      return newItem;
    },
    deleteItem: (parent, args, context, info) => {
      return context.prisma.item.delete({
        where: {
          id: args.id,
        },
      });
    },
  },
};

const schemaSource = loadSchemaSync(join(__dirname, "schema.graphql"), {
  loaders: [new GraphQLFileLoader()],
});

const schema = makeExecutableSchema({
  typeDefs: schemaSource,
  resolvers,
});

const server = new ApolloServer({
  schema,
  resolvers,
});

server.applyMiddleware({ app });

app.listen(
  { port: 4000 },
  () =>
    console.log(
      `
loadSchemaSync
will load a
GraphQLSchema
object using the provided pointer. You should use
loadTypedefsSync
instead.

const sources = loadTypedefsSync(join(__dirname, "schema.graphql"), {
  loaders: [new GraphQLFileLoader()],
});
const typeDefs = sources.map(source => source.document)
const server = new ApolloServer({ typeDefs, resolvers })
const{ApolloServer}=require(“阿波罗服务器快车”);
const{makeExecutableSchema}=require('@graphql-tools/schema');
const express=要求(“express”);
const{join}=require(“路径”);
const{loadSchema}=require(@graphql工具/load”);
const{GraphQLFileLoader}=require(@graphql-tools/graphql-file-loader”);
const{addResolversToSchema}=require(@graphql工具/schema”);
常量app=express();
常量解析程序={
查询:{
项目:(父项、参数、ctx、信息)=>{
返回ctx.prisma.item.findMany();
},
},
突变:{
makeItem:(父项、参数、上下文、信息)=>{
const newItem=context.prisma.item.create({
数据:{
…args,
价格:parseInt(Math.ceil(args.price*100)),
},
});
返回新项目;
},
deleteItem:(父项、参数、上下文、信息)=>{
return context.prisma.item.delete({
其中:{
id:args.id,
},
});
},
},
};
const schemaSource=loadSchemaAsync(join(uu dirname,“schema.graphql”){
加载程序:[新的GraphQLFileLoader()],
});
const schema=makeExecutableSchema({
typeDefs:schemaSource,
解析器,
});
const server=新服务器({
模式,
解析器,
});
applyMiddleware({app});
app.listen(
{端口:4000},
() =>
console.log(

`
loadSchemaAsync
将使用提供的指针加载
GraphQLSchema
对象。您应该改用
loadTypedefsSync

const schema = loadSchemaSync(join(__dirname, "schema.graphql"), {
  loaders: [new GraphQLFileLoader()],
});

const resolvers = {...};
const schemaWithResolvers = addResolversToSchema({
    schema,
    resolvers,
});
const server = new ApolloServer({ schema: schemaWithResolvers })
如果要使用
loadSchema
,则不需要使用
makeExecutableSchema
,因为您的架构已经创建。因此,您可以按如下所示执行此操作:


如果您使用babel传输代码,我认为您可以直接导入模式文件,如:
import yourSchema from./path/to/yourSchema.graphql”
借助插件的支持,babel插件导入graphql
只是想澄清一下:你是说使用loadTypedefsSync然后将schemaSource传递给新的Apollo服务器?我也尝试过,但没有成功。我尝试过loadSchema和LoadSchemaAsync。我尝试过addResolversToSchema并将其传递给服务器。运气不好。我一直在尝试g typeDefs必须是字符串错误。如果使用loadSchema和addResolversToSchema,则应按如下方式传递架构:
new ApolloServer({schema:schemaWithResolvers})
。请查看编辑以了解更多详细信息。我必须有一个打字错误或一些我没有看到的东西。我注释掉了我所有的代码,复制并粘贴了你的代码,并且工作正常。但就我而言,我看不到代码中的差异…哈一定是有什么。非常感谢你的帮助!这里值得注意的是,AddResolverToSchema()要求您传递“schema”。我传递的是“sources”。据我所知,变量名是不相关的,但事实似乎并非如此。这就是我的部分问题的根源。变量名是不相关的,但在本例中,您传递的是对象文字,而不是变量,并使用。