簡體   English   中英

GraphQL 可選查詢參數

[英]GraphQL optional Query Arguments

我知道您可以將架構中的參數設置為默認值,但是是否可以在我的 GraphQL 架構中使參數limit參數完全可選?

現在似乎當我在沒有指定限制的情況下點擊這個我認為這就是為什么我得到Int cannot represent non-integer value: undefined

const schema = buildSchema(`
  companies(limit: Int): [Company]
...)

在此處輸入圖片說明

我希望能夠跳過限制,以便獲得所有公司。

在 JS 中,我這樣稱呼它:

query: `query { 
          companies(limit: ${limit}) {
 ...

但有時我不想指定限制。 所以發生的事情是客戶crafters(limit: undefined)在發送crafters(limit: undefined)並且它可能試圖將其轉換為 Int。 我不確定如何不發送limit以及如何使整個參數可選。

(我也從客戶那里讀到,我應該將參數指定為變量,query($limit: Int) { companies(limit: $limit) {我猜來自我的客戶,來自JS ?如果是這樣,我將如何發送我的極限JS變量變成了那個?

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

companies(limit: Int): [Company]

您無需執行任何其他操作即可將limit設為可選——它已經是可選的。 如果您想讓limit必需,您可以通過附加一個! 到這樣的類型:

companies(limit: Int!): [Company]

您看到的錯誤與limit參數的類型無關。 問題在於您發送的查詢(基於錯誤消息)如下所示:

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

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

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

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

如果變量可以為空(注意我們使用Int而不是Int! ),那么它可以從請求中完全省略,有效地使參數的值在服務器端未定義。 目前尚不清楚您如何將請求發送到服務器,但假設您沒有使用某些客戶端庫,您可以在此處查看文檔以了解如何構建您的請求。 否則,請查看庫的文檔以了解如何在查詢中正確使用變量。

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

const GET_COMPANIES = gql`
  query Companies($limit: Int) {
    companies(limit: $limit) {
      ... // return fields
    }
  }
`;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM