亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GraphQL 可選查詢參數

GraphQL 可選查詢參數

慕仙森 2023-05-25 17:13:50
我知道您可以將模式中的參數設置為默認值,但是否可以limit在我的 GraphQL 模式中使參數參數完全可選?現在看來,當我在沒有指定限制的情況下點擊它時,我想這就是我得到的原因Int cannot represent non-integer value: undefinedconst schema = buildSchema(`   companies(limit: Int): [Company] ...)我希望能夠跳過限制,以便獲得所有公司。在 JS 中,我這樣稱呼它:query: `query {            companies(limit: ${limit}) {  ...但有時我不想指定限制。所以發生的事情是客戶端正在發送crafters(limit: undefined)并且它可能正在嘗試將其轉換為 Int。我不確定如何不發送limit以及如何使整個參數可選。(我還從客戶那里讀到,我應該將參數指定為變量,就像query($limit: Int) {  companies(limit: $limit) {我從我的客戶那里猜測的那樣,來自JS?如果是這樣,我將如何將我的 limit JS 變量發送到其中?
查看完整描述

2 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

默認情況下,GraphQL 中的參數可以為空(即可選)。因此,如果您的類型定義如下所示:

companies(limit:?Int):?[Company]

您不需要做任何其他事情就可以成為limit可選的——它已經是了。如果你想成為必需的,你可以通過將 a 附加到這樣的類型來limit使其不可為空:!

companies(limit:?Int!):?[Company]

您看到的錯誤與參數類型無關limit。問題在于您發送的查詢,根據錯誤消息,它看起來像這樣:

query?($limit:?Int){
??companies?(limit:?undefined)?{
????#?...
??}
}

這里有兩個問題:第一,您正在定義一個變量($limit),您實際上從未在查詢中使用它(如第二個錯誤所示)。第二,您將限制設置為undefined,這不是 GraphQL 中的有效文字。

您應該使用變量將任何動態值傳遞給您的查詢,而不是使用字符串插值。例如:

query?($limit:?Int){
??companies?(limit:?$limit)?{
????#?...
??}
}

如果變量可以為空(注意我們使用Int而不是Int!),那么它可以從請求中完全省略,有效地使參數的值在服務器端未定義。


查看完整回答
反對 回復 2023-05-25
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

下面是一個示例,說明如何在客戶端上定義查詢并傳遞非必需參數。不確定您的客戶端配置,但您可能想使用像 graphql-tag 這樣的庫將字符串轉換為 AST。


const GET_COMPANIES = gql`

  query Companies($limit: Int) {

    companies(limit: $limit) {

      ... // return fields

    }

  }

`;


查看完整回答
反對 回復 2023-05-25
  • 2 回答
  • 0 關注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號