2017-08-11 28 views
0

私はチェーンコードで豊富なクエリを実行しようとしています。どのピアにもCouchDBがあり、私はmarble source codeの例に従っています。 しかし、私は何も結果(エラーなし)、空の配列を取得しません。 豊富な検索結果がありません - Hyeperledger Fabric v1.0

enter image description here

私はCouchDBの中に同じクエリを実行する

は直接問題はないと私は1つのまたはそれ以上の結果が得られます。

enter image description here

これは私が使用chaincodeのソースコードです:

if len(args) == 3 && args[1] == "complex" { 
    fmt.Printf("Query complex\n") 

    if isJSON(args[2]) { 

     fmt.Printf("Complex query: %s\n", args[2]) 

     resultsIterator, err := stub.GetQueryResult(args[2]) 
     if err != nil { 
      jsonResp := "{\"Error\":\"Not able to make the query, see error: " + err.Error() + "\"}" 
      return shim.Error(jsonResp) 
     } 
     defer resultsIterator.Close() 

     // buffer is a JSON array containing QueryRecords 
     var buffer bytes.Buffer 
     buffer.WriteString("[") 

     bArrayMemberAlreadyWritten := false 
     for resultsIterator.HasNext() { 
      queryResponse, err := resultsIterator.Next() 
      if err != nil { 
       jsonResp := "{\"Error\":\"Not able to make the query, see error: " + err.Error() + "\"}" 
       return shim.Error(jsonResp) 
      } 
      // Add a comma before array members, suppress it for the first array member 
      if bArrayMemberAlreadyWritten == true { 
       buffer.WriteString(",") 
      } 
      buffer.WriteString("{\"Key\":") 
      buffer.WriteString("\"") 
      buffer.WriteString(queryResponse.Key) 
      buffer.WriteString("\"") 

      buffer.WriteString(", \"Record\":") 
      // Record is a JSON object, so we write as-is 
      buffer.WriteString(string(queryResponse.Value)) 
      buffer.WriteString("}") 
      bArrayMemberAlreadyWritten = true 
     } 
     buffer.WriteString("]") 

     fmt.Printf("Query Response: %s\n", buffer.String()) 

     return shim.Success(buffer.Bytes()) 
    } 

    jsonResp := "{\"Error\":\"The query is not a valid JSON\"}" 
    return shim.Error(jsonResp) 
} 
+0

テキストのスクリーンショットは、特に検索エンジンやスクリーンリーダーにとって非常に不愉快です。代わりにテキストをコピーして貼り付けてください。 – Flimzy

+0

@Flimzyスクリーンショットはコード、エラー、またはファブリックのテキストではありません。すべて私のチェーンコード(最初のもの)のカスタムテキストで、2番目のものはFauxtonのクエリ結果です。私はここでスクリーンショットからテキストをコピー/過去にすると検索エンジンがより効率的になる理由はわかりません。 – AnTiToinE

+0

私はFauxtonのスクリーンショットについて話していません。私は最初のイメージについて話しています。 – Flimzy

答えて

3

問題がさに関係している 'データ'。 FabricがCouchDB状態データベースに保持されているドキュメントに挿入するメタデータエンベロープ。チェインコードの作成者の観点からは、 'データ'エンベロープは存在しません。そのため、渡されたクエリから 'データ'エンベロープを除外する必要があります。ファブリックは、保存時とクエリ時の両方で 'データ'エンベロープを注入します。 Fouchx UIをCouchDBに対して直接試用クエリに使用する場合(Fabric注入コードの恩恵なし)、 'データ'エンベロープを含める必要があります。チェーンコードクエリを書くときは、 'データ'エンベロープを除外してください。

marbles02の例に対応するexample queriesを参照してください。データエンベロープはありません。

関連する問題