@duanyubin
2017-05-24T07:28:02.000000Z
字数 1499
阅读 327
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 {
name
posts {
title
}
}
}
// result
{
"person": {
"name": "ybduan",
"posts": [{
"title": "This is title"
}, {
"title": "This is another title"
}]
}
}
// query
{
person {
name
posts {
title
}
}
}
//
type person {
name: String!
email: String
posts: [Post]
}
type Post {
title: String
content: String
}
Add new fields and types to your GraphQL API without impacting existing queries
// Define type
type Person {
name: String
email: String
posts: [Post]
}
type Query {
person(name: String): Person
}
// Define resolver
const 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
})
}
}
}