GraphQL:Query.type字段类型必须是输出类型,但得到:undefined
问题描述:
我想我的第一个GraphQL方法。下面是代码:GraphQL:Query.type字段类型必须是输出类型,但得到:undefined
schema.js:
import {
GraphQLSchema,
GraphQLObjectType,
GraphQLInputObjectType,
GraphQLNonNull,
GraphQLString,
GraphQLBoolean,
GraphQLInt,
GraphQLID,
GraphQLList
} from 'graphql';
import Company from '../../models/Company';
const CompanyType = new GraphQLObjectType({
name: 'Company',
description: 'Company',
fields: {
_id: {
type: new GraphQLNonNull(GraphQLID)
},
name: {
type: GraphQLString
}
}
})
const Companies = {
type: CompanyType,
args: {
id: {
name: 'ID',
type: new GraphQLNonNull(GraphQLID)
}
},
resolve(root, params) {
return Company.find(params.id).exec();
}
}
export default new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: Companies
})
});
然后在我的server.js:
import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import morgan from 'morgan';
import graphqlHTTP from 'express-graphql';
import schema from './schema';
mongoose.Promise = global.Promise;
// set up example server
const app = express();
app.set('port', (process.env.API_PORT || 3001));
// logger
app.use(morgan('dev'));
// parse body
app.use(bodyParser.json());
// redirect all requests to /graphql
app.use(function redirect(req, res) {
res.redirect('/graphql');
});
app.use('/graphql', graphqlHTTP({
schema: schema,
graphqli: true,
pretty: true
}));
我得到以下errror:
D:\test\node_modules\graphql\jsutils\invariant.js:19
throw new Error(message);
^
Error: Query.type field type must be Output Type but got: undefined.
at invariant (D:\test\node_modules\graphql\jsutils\invariant.js:19:11)
at D:\test\node_modules\graphql\type\definition.js:361:29
at Array.forEach (native)
at defineFieldMap (D:\test\node_modules\graphql\type\definition.js:352:14)
at GraphQLObjectType.getFields (D:\test\node_modules\graphql\type\definition.js:306:44)
at typeMapReducer (D:\test\node_modules\graphql\type\schema.js:206:25)
at Array.reduce (native)
at new GraphQLSchema (D:\test\node_modules\graphql\type\schema.js:95:34)
at Object.<anonymous> (D:/9. DEV/WORKSPACE/mom/client/graphql/index.js:62:16)
at Module._compile (module.js:570:32)
at loader (D:\test\node_modules\babel-register\lib\node.js:144:5)
at Object.require.extensions.(anonymous function) [as .js] (D:\test\node_modules\babel-register\lib\node.js:154:7)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
帮助thanksited。
答
内,您的查询类型定义,你写道:
fields: Companies
应该
fields: { Companies }
望着docs,场需要一个对象或返回一个对象的功能,与该对象的关键点映射到类型中所有字段的名称(本例中为模式中的所有查询)。
此外,为了清楚,因为查询和突变是其各自类型的字段,它可能是更好的给它们命名首字母大写,而不是PascalCase(即{公司:公司}