@duanyubin
2017-05-24T07:28:02.000000Z
字数 1499
阅读 409
NODE
GraphQL provides a complete and understandable description of the data in your API
// before{person {name}}// data{"person": {"name": "ybduan","email": "ybduan@corp.netease.com"}}// after{person {name}}// data{"person": {"name": "ybduan"}}
// query{person {nameposts {title}}}// result{"person": {"name": "ybduan","posts": [{"title": "This is title"}, {"title": "This is another title"}]}}
// query{person {nameposts {title}}}//type person {name: String!email: Stringposts: [Post]}type Post {title: Stringcontent: String}
Add new fields and types to your GraphQL API without impacting existing queries
// Define typetype Person {name: Stringemail: Stringposts: [Post]}type Query {person(name: String): Person}// Define resolverconst resolverFunctions = {Query: {async person(_, args, context) {return await DB.model('person').find({ where: { name: args.name })}},Person: {async posts(person, args, context) {return await person.getPosts()}}}
{person(name: "ybduan") {}}
{"person": {"email": "ybduan@corp.netease.com"}}
Where to perform validation and authorization checks

const resolveFunctions = {Person: {posts(person, args, context = {}) {// return person.getPosts()const where = (context.authToken && person.id === context.authToken.id) ? null : { outward: true }return person.getPosts({ where }).then((data) => {return data})}}}