gpt4 book ai didi

javascript - GraphQL 无法解析嵌套对象属性

转载 作者:行者123 更新时间:2023-11-29 16:06:54 24 4
gpt4 key购买 nike

我正在尝试返回一个带有列表中一些嵌套属性对象的 graphQL 查询。一切似乎都已检查完毕,但我得到的是空值。

预期的数据结构响应(有关结构的更多详细信息 here ):

//Return a GraphQLList type of all objects :    
[
{
"subscription" : {

},
"customer" : {

},
},
]

查询:{ subscriptions { subscription { id customer_id } } }

GraphQL 查询对象:

var Query = new graphQL.GraphQLObjectType({
name: 'Query',
description: 'Root of the Schema',
fields: {
subscriptions: {
type: new graphQL.GraphQLList(SubscriptionsList),
args : {
customer_name: { type: graphQL.GraphQLString },
customer_id: { type: graphQL.GraphQLString }
},
resolve : function (source, args) {
return getSubscriptions().then(function (res) {
// Shows that data is returned
console.log('Data: ', res.list);

return res.list;
}).catch(function (err) {
return err;
});
}
}
}
});

它期望返回 SubscriptionsListGraphQLList 类型:

var SubscriptionsList = new graphQL.GraphQLObjectType({
name : 'SubscriptionObj',
description : 'stuff',
fields : function () {
return {
subscription : {
type : Subscription,
resolve : function (subscription) {
return subscription;
}
}
}
}
});

应该解析嵌套字段属性:

var Subscription = new graphQL.GraphQLObjectType({
name : 'Subscription',
description : 'stuff',
fields : function () {
return {
id: {type: graphQL.GraphQLString},
customer_id: {type: graphQL.GraphQLString}
}
}
});

Console.log(res.list) 输出(来自查询):我确实得到了我期望的数据和结构:

[ { subscription: 
{ id: 'cbdemo_lloyd-sub2',
customer_id: 'cbdemo_lloyd',
plan_id: 'cbdemo_nuts',
addons: [Object],
due_invoices_count: 0,
shipping_address: [Object] },
customer: {
...
}
},
{...}
]

GraphQL 查询输出:

{
"data": {
"subscriptions": [
{
"subscription": {
"id": null,
"customer_id": null
}
},
{
"subscription": {
"id": null,
"customer_id": null
}
},

编辑 不是真的有必要,但这是返回 promise 的 getSubscriptions() API 调用:

function getSubscriptions() {
return new Promise(function (resolve, reject) {
chargebee.subscription.list({
limit : 5,
"plan_id[is_not]" : "basic",
"status[is]" : "active",
"sort_by[asc]" : "created_at"
}).request(function(error,result){
if (error) return reject(error);
return resolve(result);
});
});
}

最佳答案

看起来你有点困惑,基本上,当你设置

new graphQL.GraphQLList(SubscriptionsList),

这已经是一个列表。这意味着你真正的意思是

new graphQL.GraphQLList(Subscription),

接下来,您的订阅对象不包含任何解析逻辑,所以我希望它是这样的:

var Subscription = new graphQL.GraphQLObjectType({
name : 'Subscription',
description : 'stuff',
fields : function () {
return {
id: {
type: graphQL.GraphQLString,
resolve: function(subscription) {
return subscription.subscription.id;
}
},
customer_id: {
type: graphQL.GraphQLString,
resolve: function(subscription) {
return subscription.subscription.customer_id;
}
},
}
}
});

在幕后基本上发生的事情是,GraphQL 将使用 Subscription 对象解析提供的列表中的每个 javascript 对象。那里的每个解析器都会将 javascript 对象作为第一个值,并从中返回基本值。

关于javascript - GraphQL 无法解析嵌套对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com