@@ -15,7 +15,7 @@ const common = require('../utils/common')
1515 * It also integrates with 'prom-client' to measure duration when requesting.
1616 */
1717class QueryService {
18- constructor ( ) { }
18+ constructor ( ) { }
1919
2020 /**
2121 * queryChaincode sends a proposal to one or more endorsing peers that will be handled by the chaincode
@@ -29,35 +29,67 @@ class QueryService {
2929 */
3030 async queryChaincode ( peerNames , channelName , chaincodeName , fcn , args , orgName , userName ) {
3131 try {
32+ const client = await common . getClientForOrg ( orgName , userName )
3233 // first setup the client for this or
3334 const channel = await common . getChannel ( orgName , userName , channelName ) ;
3435 if ( ! channel ) {
3536 let message = util . format ( 'Channel %s was not defined in the connection profile' , channelName ) ;
3637 logger . error ( message ) ;
37- throw new Error ( message ) ;
38+ return common . createReturn ( 202 , "" , message , message ) ;
3839 }
40+ const tx_id = client . newTransactionID ( ) ;
3941
4042 let request = {
4143 targets : peerNames , //queryByChaincode allows for multiple targets
4244 chaincodeId : chaincodeName ,
4345 fcn : fcn ,
44- args : args
46+ args : args ,
47+ chainId : channelName ,
48+ txId : tx_id
4549 } ;
4650
47- let response_payloads = await channel . queryByChaincode ( request ) ;
48- if ( response_payloads ) {
49- for ( let i = 0 ; i < response_payloads . length ; i ++ ) {
50- logger . debug ( '------->>> R E S P O N S E : ' + response_payloads [ i ] . toString ( 'utf8' ) ) ;
51- return response_payloads [ i ] . toString ( 'utf8' ) ;
51+ const proposalResults = await channel . sendTransactionProposal ( request ) ;
52+ const responses = proposalResults [ 0 ] ;
53+ logger . debug ( 'queryByChaincode - results received' ) ;
54+
55+ if ( ! responses || ! Array . isArray ( responses ) ) {
56+ return common . createReturn ( 202 , "" , `Payload results are missing from the chaincode query` , "" ) ;
57+ }
5258
59+ if ( responses [ 0 ] ) {
60+ if ( responses [ 0 ] instanceof Error ) {
61+ let err = responses [ 0 ] ;
62+ let jsonErr = JSON . stringify ( err , Object . getOwnPropertyNames ( err ) ) ;
63+ let objErr = JSON . parse ( jsonErr ) ;
64+ try {
65+ let convertObj = JSON . parse ( objErr . message ) ;
66+ // logger.debug('convertObj: ', convertObj);
67+ return common . createReturn ( convertObj . status , "" , convertObj . msg , convertObj . msg ) ;
68+ } catch ( err ) {
69+ logger . error ( 'error: ' , err ) ;
70+ return common . createReturn ( convertObj . status , "" , err , err ) ;
71+ }
72+ } else if ( responses [ 0 ] . response && responses [ 0 ] . response . payload ) {
73+ logger . debug ( "RESPONSE DATA: " , responses [ 0 ] . response )
74+ var obj = responses [ 0 ] . response
75+ try {
76+ obj . payload = JSON . parse ( obj . payload . toString ( 'utf8' ) ) ;
77+ } catch ( e ) {
78+ obj . payload = obj . payload . toString ( 'utf8' ) ;
79+ }
80+ return common . createReturn ( obj . status , obj . payload , "Success" , "Success" ) ;
81+ } else {
82+ logger . error ( 'queryByChaincode - unknown or missing results in query ::' + responses ) ;
83+ return common . createReturn ( 202 , "" , `queryByChaincode - unknown or missing results in query` , "" ) ;
5384 }
85+
5486 } else {
5587 logger . error ( 'response_payloads is null' ) ;
56- return ' response_payloads is null' ;
88+ return common . createReturn ( 202 , "" , ` response_payloads is null` , "" ) ;
5789 }
5890 } catch ( error ) {
5991 logger . error ( 'Failed to query due to error: ' + error . stack ? error . stack : error ) ;
60- return error . toString ( ) ;
92+ return common . createReturn ( 202 , "" , error . toString ( ) , error . toString ( ) ) ;
6193 }
6294 }
6395
@@ -278,10 +310,10 @@ class QueryService {
278310 ) ;
279311 } ) ;
280312 const output = headerAsn . encode ( {
281- Number : parseInt ( header . number ) ,
282- PreviousHash : Buffer . from ( header . previous_hash , 'hex' ) ,
283- DataHash : Buffer . from ( header . data_hash , 'hex' )
284- } ,
313+ Number : parseInt ( header . number ) ,
314+ PreviousHash : Buffer . from ( header . previous_hash , 'hex' ) ,
315+ DataHash : Buffer . from ( header . data_hash , 'hex' )
316+ } ,
285317 'der'
286318 ) ;
287319 return sha . sha256 ( output ) ;
0 commit comments