2017-07-07 22 views
3

私は最初のGraphQLアプローチを試みています。ここでは、コードは次のようになります。GraphQL:Query.typeフィールドタイプは出力タイプである必要がありますが、未定義です

schema.js:私のserver.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 
    }) 
}); 

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) 

ヘルプありがとうございます。あなたのクエリのタイプ定義内

答えて

2

は、あなたが書いた:

fields: Companies 

それはdocsを見てみると

fields: { Companies } 

する必要があり、各フィールドは、そのオブジェクトのキーを持つオブジェクトまたはオブジェクトを返す関数を取りますそのタイプのすべてのフィールドの名前(この場合はスキーマ内のすべてのクエリ)にマッピングします。

また、わかりやすくするために、クエリと突然変異はそれぞれのタイプのフィールドであるため、PascalCaseではなくキャメルケースで名前を付ける方がよい場合があります({企業:Companies}

関連する問題