我對GraphQL非常新穎。我試圖傳遞一個像這樣的對象作爲參數:GraphQL--傳遞非特定對象的對象作爲參數
{
filters: {
status: 'approved',
id: {
LESS_THAN: 200
}
}
}
或者這個對象可以是這樣的;
{
filters: {
status: ['approved', 'pending'],
id: 200
}
}
我知道所有的屬性可以在這個對象,但所有這些屬性可以是一個字符串/ int或一個對象。
我試圖去定義它像這一點,但它顯然沒有奏效:
args: {
filters: { type: new GraphQLNonNull(new GraphQLNonNull(GraphQLString)) },
},
我試圖定義一個GraphQL型GraphQLInputObjectType
的說法。
const OffersFiltersType = new GraphQLInputObjectType({
name: 'Filters',
description: '...',
fields:() => ({})
id: {
type: new GraphQLNonNull({
name: 'Id',
description: '...',
fields: {
}
}),
resolve: (offer) => offer.id
},
}),
});
但是我怎麼能指定這種類型,我的id可以是一個int或一個對象?
這是我的查詢定義:
const QueryType = new GraphQLObjectType({
name: 'Query',
description: '...',
fields:() => ({
offers: {
type: OffersType,
args: {
limit: { type: GraphQLInt },
page: { type: GraphQLInt },
sort: { type: GraphQLString },
filters: { [HERE] }
},
resolve: (root, args, context, info) => {
const gqlFields = graphqlFields(info);
const fields = Object.keys(gqlFields.offer);
const queryArgs = args;
queryArgs.fields = fields;
return getOffers(queryArgs);
}
},
}),
});
這是我用的SuperAgent
const getOffers = (args) => {
const queryArgs = args;
if (typeof queryArgs.limit !== 'undefined') {
queryArgs.limit = args.limit;
} else {
queryArgs.limit = Number.MAX_SAFE_INTEGER;
}
return new Promise((fulfill, reject) => {
request
.get(API_URL)
.query(qs.stringify(args))
.end((err, res) => {
if (err) {
reject(err);
}
fulfill(res);
});
});
};
我需要這個對象來構建我的決心功能的查詢請求。感謝大家的幫助!我只需要簡單的建議!
我知道所有的屬性名稱(我將它添加到我的問題),但我怎麼能定義參數可以是一個int或一個對象? –
對於數組,您應該要求該字段始終是一個數組,並且只需使用一個元素的數組。我不認爲允許一個字段是一個原始對象或對象也是一個好主意,你可能需要它永遠是一個對象,並使一些子字段可選。 – ssube