【问题标题】:Error: Query root type must be provided. after breaking code into modules错误:必须提供查询根类型。将代码分解为模块后
【发布时间】:2021-01-27 12:25:35
【问题描述】:

我试图将我的代码分解为模块,现在我收到以下错误:

Error: Query root type must be provided.
    at assertValidSchema (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\type\validate.js:71:11)
    at assertValidExecutionArguments (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\execution\execute.js:153:35)
    at executeImpl (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\execution\execute.js:101:3)
    at Object.execute (C:\Users\aironsid\Documents\tatooify\server\node_modules\graphql\execution\execute.js:63:63)
    at Object.generateSchemaHash (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-core\dist\utils\schemaHash.js:15:32)
    at ApolloServer.generateSchemaDerivedData (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-core\dist\ApolloServer.js:269:41)
    at new ApolloServerBase (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-core\dist\ApolloServer.js:161:38)
    at new ApolloServer (C:\Users\aironsid\Documents\tatooify\server\node_modules\apollo-server-express\dist\ApolloServer.js:60:9)
    at Object.<anonymous> (C:\Users\aironsid\Documents\tatooify\server\index.js:11:16)

这是我的 index.js

const express = require('express');
const {
  ApolloServer,
} = require('apollo-server-express');
const { UserTypeDef } = require('./graphql/user/UserTypeDef');
const { UserResolver } = require('./graphql/user/UserResolvers');
const PORT = 4000;

const app = express();

const server = /* Error is thrown here */ new ApolloServer({
  typeDefs: [
    UserTypeDef,
  ],
  resolvers: [
    UserResolver,
  ]
});
server.applyMiddleware({ app });

app.listen({ port: PORT }, () => console.log(`???? Server ready at http://localhost:4000${ server.graphqlPath }`),
);

这里是 UserTypeDef.js

const { gql } = require('apollo-server-express');

module.exports = {
  UserTypeDef: gql`    
    type User {
        id: ID
        joinedDate: Int
        name: String
    }
  `,
};

这里是 UserResolvers.js

module.exports = {
  UserResolver: {
    User: () => ({
      id: 1,
      joinedDate: 123123,
      name: 'Test',
    }),
  },
};

这是我的依赖项,以防它们有用

"dependencies": {
  "apollo-server-express": "^2.18.2"
  "express": "^4.17.1",
  "graphql": "^15.3.0",
  "mongoose": "^5.10.4"
},

我尝试搜索,但似乎我以错误的方式导入或导出 typeDefs 和解析器

【问题讨论】:

  • 错误信息很清楚...type Query在哪里?
  • 我必须创建类型查询吗?我以为我可以创建我需要使用的东西。所以在我的情况下用户。

标签: javascript node.js express graphql apollo-server


【解决方案1】:

好的,我这样修复它:

index.js

const app = require('express')();
const { ApolloServer } = require('apollo-server-express');
const { typeDefs } = require('./graphql/typeDefs');
const { UserResolver } = require('./graphql/user/UserResolvers');

const server = new ApolloServer({
  typeDefs,
  resolvers: [ UserResolver ],
});

server.applyMiddleware({ app });

app.listen({ port: 4000 }, () => console.log(`? Server ready at http://localhost:4000${ server.graphqlPath }`));

typeDefs.js

const { gql } = require('apollo-server-express');
const { UserTypeDef } = require('./user/UserTypeDef');

module.exports.typeDefs =  gql`
    ${ UserTypeDef }
  
    type  Query {
        users: [User]
    }
`;

UserTypeDefs.js

const { gql } = require('apollo-server-express');

module.exports.UserTypeDef = gql`
  type User {
      id: ID
      joinedDate: Int
      name: String
  }
`;

有一些有用的信息here

【讨论】:

  • webpack-graphql-loader 能够加载/使用普通的 graphql 文件
猜你喜欢
  • 2020-04-23
  • 2021-01-14
  • 2019-06-16
  • 2018-12-15
  • 2021-07-08
  • 2020-05-17
  • 2021-09-11
  • 2016-09-18
  • 2020-11-30
相关资源
最近更新 更多