2017-07-07 259 views
3

我想我的第一個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。

回答

2

內,您的查詢類型定義,你寫道:

fields: Companies 

應該

fields: { Companies } 

望着docs,場需要一個對象或返回一個對象的功能,與該對象的關鍵點映射到類型中所有字段的名稱(本例中爲模式中的所有查詢)。

此外,爲了清楚,因爲查詢和突變是其各自類型的字段,它可能是更好的給它們命名首字母大寫,而不是PascalCase(即{公司:公司}

相關問題