最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

GraphQL:Query.type字段类型必须是输出类型,但得到:未定义

IT培训 admin 4浏览 0评论

GraphQL:Query.type字段类型必须是输出类型,但得到:未定义

我想我的第一个GraphQL方法。下面是代码:

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
}));

我收到以下错误:

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)

帮助表示赞赏。

回答如下:

里面的查询类型定义,你写道:

fields: Companies

它应该是

fields: { Companies }

纵观docs,场需要一个对象或返回一个对象的功能,与该对象的按键映射到的类型(架构中的所有查询在这种情况下)的所有字段的名称。

此外,为了清楚,因为查询和突变是其各自类型的字段,它可能是更好的给它们命名首字母大写,而不是PascalCase(即{公司:公司}

GraphQL:Query.type字段类型必须是输出类型,但得到:未定义

我想我的第一个GraphQL方法。下面是代码:

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
}));

我收到以下错误:

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)

帮助表示赞赏。

回答如下:

里面的查询类型定义,你写道:

fields: Companies

它应该是

fields: { Companies }

纵观docs,场需要一个对象或返回一个对象的功能,与该对象的按键映射到的类型(架构中的所有查询在这种情况下)的所有字段的名称。

此外,为了清楚,因为查询和突变是其各自类型的字段,它可能是更好的给它们命名首字母大写,而不是PascalCase(即{公司:公司}

发布评论

评论列表 (0)

  1. 暂无评论