首页 > 其他 > 详细

[GraphQL] Use GraphQLNonNull for Required Fields

时间:2016-12-31 13:28:34      阅读:272      评论:0      收藏:0      [点我收藏+]

While certain fields in a GraphQL Schema can be optional, there are some fields or arguments that are necessary in order to either fulfill a query, or to provide a guarantee to people using the Schema that some field exists. In this video, we‘ll take a look at turning an argument in a NonNull argument by applying the GraphQLNonNull type in order to guarantee that the given argument is supplied in the query.

 

const express   = require(express);
const graphqlHttp = require(express-graphql);
const { getVideoById } = require(./data/index);
const server = express();
const port   = process.env.PORT || 3000;

const {
    GraphQLSchema,
    GraphQLObjectType,
    GraphQLString,
    GraphQLInt,
    GraphQLNonNull,
    GraphQLBoolean,
    GraphQLID
      } = require(graphql);

const videoType = new GraphQLObjectType({
    name: video,
    description: A video on Egghead.io,
    fields: {
        id: {
            type: GraphQLID,
            description: The id of the video
        },
        title: {
            type: GraphQLString,
            description: The title of the video
        },
        duration: {
            type: GraphQLInt,
            description: The duration of the video
        },
        watched: {
            type: GraphQLBoolean,
            description: Whether or no the viewer watched the video
        }
    }
})

const queryType = new GraphQLObjectType({
    name: QueryType,
    description: The root query type,
    fields :{
        video: {
            type: videoType,
            args: {
                id: {
                    type : new GraphQLNonNull(GraphQLID),
                    description: The id of the video
                }
            },
            resolve: (_, args) => getVideoById(args.id)
        }
    }
});

const schema = new GraphQLSchema({
    query: queryType
});

server.use(/graphql, graphqlHttp({
                                     schema,
                                     graphiql  : true, // use graphiql interface
                                 }));

server.listen(port, () => {
    console.log(`Listening on http`)
})

 

If gave the query:

{
  video{
    id
    title
    duration
    watched
  }
}

Then will get the result as:

{
  "errors": [
    {
      "message": "Field \"video\" argument \"id\" of type \"ID!\" is required but not provided.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ]
    }
  ]
}

 

Then if get id args will get result as normal:

{
  video (id:"a"){
    id
    title
    duration
    watched
  }
}

 

[GraphQL] Use GraphQLNonNull for Required Fields

原文:http://www.cnblogs.com/Answer1215/p/6239032.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!