Express-GraphQL 上的多个过滤器

Posted

技术标签:

【中文标题】Express-GraphQL 上的多个过滤器【英文标题】:Multiple Filters On Express-GraphQL 【发布时间】:2017-04-12 21:06:00 【问题描述】:

我在我的应用程序中使用 express-graphql 和 node-fetch。我正在尝试将 graphql 与我的 api 调用一起使用来获取数据。目前我正在做

const QueryType = new GraphQLObjectType(
  name: "Query",
  fields: () => (
    acctsFromRelation: 
      type: new GraphQLList(AcctType),
      args: 
       id: type: GraphQLString,
       status: type: GraphQLString
      ,
      resolve: (root, args) => getOpIds(args)
    
  )
);

AcctType如下

 const AcctType = new GraphQLObjectType(
  name: "acct",
  fields: () => (
    id: type: GraphQLString,
    name: type: GraphQLString,
    clientType: type: GraphQLString,
    accountStatus: type: GraphQLString,
    args: 
      status: type: GraphQLString
    ,
    primaryContact: type: contactType,
    billingAddress: type: billingType
  )
);

我正在尝试做这样的事情:

 acctsFromRelation (id: "2") 
  id
  name
  accountStatus (status: "active")
  primaryContact 
    firstName
    lastName
    phone
    email
  
  billingAddress 
    address1
    address2
    city
    state
    postalCode
    country
  


我获取所有 id 为 2 且 accountStatus 为 active 的帐户。

GetOpIds如下:

function getOpIds (ids) 
  return fetch(API CALL THAT GIVES IDS)
    .then(res => res.json())
    .then(json => json.map((element) => getAccountByUrl(element.id)))
    .catch(err => err)

getAccountByUrl 看起来像这样

function getAccountByUrl (ids) 
  return fetch(URL THAT LOOKS UP 1 ID at a TIME)
    .then(res => res.json())
    .then(json => json)
    .catch(err => err)

【问题讨论】:

【参考方案1】:

你可以直接从代码中试试这个

const query = `query AcctsFromRelation($id: ID, $status: String)acctsFromRelation(id: $id, status: $status)`;
        const variables =  id: id, status: status ;
        return new Promise((resolve, reject) => 
          request("/graphql", query, variables).then(data => 
            resolve(data.acctsFromRelation);
          );
        );

【讨论】:

以上是关于Express-GraphQL 上的多个过滤器的主要内容,如果未能解决你的问题,请参考以下文章