Relay / GraphQL 'resolve' 是如何工作的?
How does Relay / GraphQL 'resolve' works?
我正在尝试 Relay and GraphQL。当我在做模式时,我是这样做的:
let articleQLO = new GraphQLObjectType({
name: 'Article',
description: 'An article',
fields: () => ({
_id: globalIdField('Article'),
title: {
type: GraphQLString,
description: 'The title of the article',
resolve: (article) => article.getTitle(),
},
author: {
type: userConnection,
description: 'The author of the article',
resolve: (article) => article.getAuthor(),
},
}),
interfaces: [nodeInterface],
})
所以,当我要求这样的文章时:
{
article(id: 1) {
id,
title,
author
}
}
它会对数据库进行 3 次查询吗?我的意思是,每个字段都有一个向数据库发出请求的解析方法(getTitle
、getAuthor
等)。我做错了吗?
这是getAuthor
的例子(我用的是mongoose):
articleSchema.methods.getAuthor = function(id){
let article = this.model('Article').findOne({_id: id})
return article.author
}
如果 resolve
方法被传递给 article
,你不能只访问 属性 吗?
let articleQLO = new GraphQLObjectType({
name: 'Article',
description: 'An article',
fields: () => ({
_id: globalIdField('Article'),
title: {
type: GraphQLString,
description: 'The title of the article',
resolve: (article) => article.title,
},
author: {
type: userConnection,
description: 'The author of the article',
resolve: (article) => article.author,
},
}),
interfaces: [nodeInterface],
})
由于 Mongoose 中的 Schema.methods
在模型 上定义了方法 ,因此它不需要文章的 ID(因为您在文章实例上调用它)。所以,如果你想保留这个方法,你只需要做:
articleSchema.methods.getAuthor = function() {
return article.author;
}
如果这是您需要查找的内容,例如在另一个集合中,然后 你需要做一个单独的查询(假设你没有使用 refs):
articleSchema.methods.getAuthor = function(callback) {
return this.model('Author').find({ _id: this.author_id }, cb);
}
我正在尝试 Relay and GraphQL。当我在做模式时,我是这样做的:
let articleQLO = new GraphQLObjectType({
name: 'Article',
description: 'An article',
fields: () => ({
_id: globalIdField('Article'),
title: {
type: GraphQLString,
description: 'The title of the article',
resolve: (article) => article.getTitle(),
},
author: {
type: userConnection,
description: 'The author of the article',
resolve: (article) => article.getAuthor(),
},
}),
interfaces: [nodeInterface],
})
所以,当我要求这样的文章时:
{
article(id: 1) {
id,
title,
author
}
}
它会对数据库进行 3 次查询吗?我的意思是,每个字段都有一个向数据库发出请求的解析方法(getTitle
、getAuthor
等)。我做错了吗?
这是getAuthor
的例子(我用的是mongoose):
articleSchema.methods.getAuthor = function(id){
let article = this.model('Article').findOne({_id: id})
return article.author
}
如果 resolve
方法被传递给 article
,你不能只访问 属性 吗?
let articleQLO = new GraphQLObjectType({
name: 'Article',
description: 'An article',
fields: () => ({
_id: globalIdField('Article'),
title: {
type: GraphQLString,
description: 'The title of the article',
resolve: (article) => article.title,
},
author: {
type: userConnection,
description: 'The author of the article',
resolve: (article) => article.author,
},
}),
interfaces: [nodeInterface],
})
由于 Mongoose 中的 Schema.methods
在模型 上定义了方法 ,因此它不需要文章的 ID(因为您在文章实例上调用它)。所以,如果你想保留这个方法,你只需要做:
articleSchema.methods.getAuthor = function() {
return article.author;
}
如果这是您需要查找的内容,例如在另一个集合中,然后 你需要做一个单独的查询(假设你没有使用 refs):
articleSchema.methods.getAuthor = function(callback) {
return this.model('Author').find({ _id: this.author_id }, cb);
}