按需獲取須要的數據bash
// 定義類型
const typeDefs = gql`
type Hero {
name: String
age: Int
}
# 查詢類型
type Query {
hero: Hero
}
`;
// resolver 函數
const resolvers = {
Query: {
hero: () => {
return {
name: 'nordon',
age: 18
}
}
},
};
複製代碼
// 查詢 hero 對象的 name 屬性
{
hero {
name
}
}
// 結果
{
"data": {
"hero": {
"name": "nordon"
}
}
}
複製代碼
有多個操做時、操做名稱是必須的、爲了調試方便最好添加操做名服務器
# 定義數據類型
const typeDefs = gql`
# 輸入類型
input UserInfo {
name: String
pwd: String
}
# 用戶類型
type User {
id: ID
name: String
pwd: String
}
# 變動類型
type Mutation {
addUser(userInfo: UserInfo): User
}
# 查詢類型
type Query {
hello: String
msg: String
}
`;
// 3. 解析數據類型對應的具體數據
const resolvers = {
Query: {
hello: () => 'hi query',
msg: () => 'msg query'
},
Mutation: {
addUser: (parent, args) => {
return {
id: uuid(),
name: args.userInfo.name,
pwd: args.userInfo.pwd
}
}
}
};
複製代碼
# 須要定義 每一個查詢的類型名稱、存在多個查詢前面必須存在 query、
query helloInfo {
hello
}
query msgInfo {
msg
}
mutation addUser {
addUser(userInfo: {
name: "nordon",
pwd: "123123"
}){
id
name
pwd
}
}
複製代碼
01.png 函數
有時候須要根據特定的條件查詢數據、此時能夠使用查詢參數post
const typeDefs = gql`
# 學生類型
type Student {
name: String
age: Int
gender: Boolean
}
# 查詢類型
type Query {
hello: String
stu(id: Int, name: String): Student
}
`;
const resolvers = {
Query: {
hello: () => 'Hello world!',
stu: (parent, args) => {
let stu = null;
if(args.id === 1 && args.name === 'nordon'){
stu = {
name: 'norodn',
age: 18,
gender: true
}
}else {
stu = {
name: 'null',
age: 0,
gender: false
}
}
return stu
}
},
};
複製代碼
query stu {
stu(id: 1, name: "nordon"){
name
age
gender
}
}
複製代碼
02.png 網站
有時字段的參數須要動態提供、而不是固定的值、此時就能夠使用變量、相似函數中的形參ui
// 定義數據類型
const typeDefs = gql`
# 課程類型
type Course {
cname: String
score: Float
}
# 學生類型
type Student {
id: ID
sname: String
age: Int
scores(num: Float): [Course]
}
# 查詢類型
type Query {
stu(id: Int): Student
}
`;
// 解析數據類型對應的具體數據
const resolvers = {
Student: {
scores: (parent, args) => {
return parent.scores && parent.scores.filter(item => item.score > args.num)
}
},
Query: {
stu: (parent, args) => {
if(args.id === 1){
return {
id: uuid(),
sname: 'nordon',
age:18,
scores: [{
cname: '數學',
score: 66
},{
cname: '英語',
score: 55
},{
cname: '語文',
score: 77
}]
}
}else{
return {
id:0,
sname: 'null',
scores: null
}
}
}
},
};
複製代碼
03.png spa
04.png 3d
有時候查詢的字段數量不是固定的、此時能夠經過制定的方式進行控制調試
@include(if: Boolean)
僅在參數爲 true
時包含此字段@skip(if: Boolean)
若是參數爲 true
時跳過此字段// 定義數據類型
const typeDefs = gql`
# 學生類型
type Student {
id: ID
name: String
gender: Boolean
}
# 查詢類型
type Query {
stu(id: Int): Student
}
`;
// 解析數據類型對應的具體數據
const resolvers = {
Query: {
stu: (parent, args) => {
if(args.id === 1){
return {
id: uuid(),
name: 'nordon',
gender: true
}
}else{
return {
id: uuid(),
name: 'wangyao',
gender: false
}
}
}
},
};
複製代碼
# 若是指令使用的、須要顯示的傳遞字段、須要在後面增長一個!歎號
query stu($id: Int, $gender: Boolean!){
stu(id: $id){
id
name
gender @include(if: $gender)
# gender @skip(if: $gender)
}
}
複製代碼
05.png code
06.png
經過不一樣的參數來查詢相同的字段信息、好比查詢學生的數學和英語成績
// 定義數據類型
// Query 類型是默認客戶端查詢的類型、而且該類型在服務端必須存在而且是惟一的
const typeDefs = gql`
# 課程類型
type Course {
cname: String
score: Float
}
# 學生類型
type Student {
id: ID
sname: String
age: Int
scores(cname: String): [Course]
}
# 查詢類型
type Query {
stu: Student
}
`;
01.png
// 解析數據類型對應的具體數據
const resolvers = {
Student:{
scores: (parent, args) => {
if(args.cname === '數學' || args.cname === '語文'){
return parent.scores.filter(item => item.cname === args.cname)
}else{
return parent.scores
}
}
},
Query: {
stu: (parent, args) => {
return {
id: uuid(),
sname: 'nordon',
age:18,
scores: [{
cname: '數學',
score: 66
},{
cname: '英語',
score: 55
},{
cname: '語文',
score: 77
}]
}
}
},
};
複製代碼
query stu{
stu{
id
sname
math: scores(cname: "數學"){
cname
score
},
china: scores(cname: "語文"){
cname
score
},
all: scores{
cname
score
}
}
}
複製代碼
07.png
改變服務器數據須要用到mutation操做
// 2. 定義數據類型
// Query 類型是默認客戶端查詢的類型、而且該類型在服務端必須存在而且是惟一的
const typeDefs = gql`
#輸入類型
input UserInfo {
uname: String
pwd: String
}
# 用戶類型
type User {
id: ID
uname: String
pwd: String
}
# 變動類型
type Mutation {
addUserByParams(uname: String, pwd: String): User
addUserByInput(userInput: UserInfo): User
}
# 查詢類型
type Query {
hello: String
}
`;
// 3. 解析數據類型對應的具體數據
const resolvers = {
Query: {
hello: () => 'Hello world!'
},
Mutation: {
addUserByParams: (parent, args) => {
return {
id: uuid(),
uname: args.uname,
pwd: args.pwd
}
},
addUserByInput: (parent, args) => {
return {
id: uuid(),
uname: args.userInput.uname,
pwd: args.userInput.pwd
}
}
}
};
複製代碼
mutation addUserByParams {
addUserByParams(uname: "nordon", pwd: "123123"){
id
uname
pwd
}
}
mutation addUserByInput($userInput: UserInfo){
addUserByInput(userInput: $userInput){
id
uname
pwd
}
}
複製代碼
08.png