2016-09-02 46 views
1

我正在嘗試使用GraphQL和Apollo解決REST查詢。如何使用一個查詢來解決graphQL中的許多Rest輪往返行程?

我休息的數據看起來像這樣

傳遞一個基金,ID爲分裂解析器返回一個 - > [拆分陣列] - >每個分割具有donation_id - >我要使用該ID來獲取{捐贈}從單獨的休息端點

這裏對象是我的架構

export const schema = [` 

schema { 
    query: RootQuery 
} 

type RootQuery { 
    Splits(id: Int!): [Splits] 
} 

type Splits { 
    amount_in_cents:Int 
    donation_id:Int 
    fund_id:Int 
    id:Int 
    memo:String 
    donation(donation_id: Int): Donation 
} 

type Donation { 
    amount_in_cents: Int 
    bank_name: String 
} 
`]; 

這裏是我的解析器文件

import rp from 'request-promise'; 

const DTBaseURL = 'https://restendpointdomainhere.com/'; 
const getFromDT = (getQuery) => { 
    const data = rp(DTBaseURL + getQuery, { 
    'auth': { 
     "user": Meteor.settings.endpoint.user, 
     "pass": Meteor.settings.endpoint.pass, 
    } 
    }) 
    .then((res) => JSON.parse(res)) 
    .then((res) =>{ 
     return res; 
    }); 
    return data; 
}; 



export default resolveFunctions = { 
    RootQuery: { 
    Splits(root, args, context){ 
     let newValue = []; 
     const getQuery = 'funds/' + args.id + '/splits.json'; 

     const data = getFromDT(getQuery) 
     .then((res) => { 
      res.forEach(function (donationSplit) { 
      newValue.push(donationSplit.split); 
      }); 
      return newValue; 
     }); 

     return data; 
    }, 
    donation(root, args, context){ 
     console.log(args); 
     const getQuery = 'donations/' + args.donation_id + '.json'; 

     const data = getFromDT(getQuery) 
     .then((res) => { 
      return res.donation; 
     }); 
     return data; 
    } 
    } 
}; 

任何查詢我@ @/graphql讓我這個錯誤消息。

{ 
    "errors": [ 
    { 
     "message": "Resolve function missing for \"Splits.donation\"" 
    } 
    ] 
} 

這裏的任何幫助表示讚賞。

回答

2

看起來您正在使用graphql-tools來創建您的模式。此錯誤消息告訴您,您的架構無法成功構建,因爲Splits上的donation字段需要解析函數。您定義的決心功能,但是你把它裏面RootQuery,而不是Splits它所屬:

export default resolveFunctions = { 
    RootQuery: { 
    Splits(root, args, context){ 
     let newValue = []; 
     const getQuery = 'funds/' + args.id + '/splits.json'; 

     const data = getFromDT(getQuery) 
     .then((res) => { 
      res.forEach(function (donationSplit) { 
      newValue.push(donationSplit.split); 
      }); 
      return newValue; 
     }); 

     return data; 
    }, 
    }, 
    Splits: { // <<---- you forgot this ------ 
    donation(root, args, context){ 
     console.log(args); 
     const getQuery = 'donations/' + args.donation_id + '.json'; 

     const data = getFromDT(getQuery) 
     .then((res) => { 
      return res.donation; 
     }); 
     return data; 
    } 
    }, 
}; 
+0

感謝。現在如何讓donation_id從查詢響應傳遞到這個解析器?以下是我在GraphiQL { 拆分(ID:71455){ amount_in_cents donation_id 捐款(donation_id:donation_id){ amount_in_cents }} } 的 – JoshJoe

+0

'donation'解析器將得到的對象,你作爲第一個參數返回'Splits'解析器,並將所有GraphQL參數(包括donation_id)作爲第二個參數返回。 – helfer

+1

所以從你的描述看來,你甚至不需要你的字段中的donation_id參數,因爲每個分割都只有一個捐獻,所以donation_id可以是捐贈解析器獲得的分割對象的一部分作爲第一個參數。 – helfer

相關問題