获取错误:http:从Hyperledger Composer中的事务处理器函数读取关闭的响应正文

问题描述 投票:0回答:1

我有一个运行简单BNA的结构网络。这个BNA定义了两种类型的参与者即。企业和个人。在这里,每个人都与公司有关系,如下所示(cto文件):

participant Corporate identified by corporateId {
    o String corporateId
    o String corporateName
}
participant Person identified by personId {
    o String personId
    --> Corporate corporate
}

我正在尝试做什么:

  1. 使用事务处理器功能创建公司:成功
  2. 使用事务处理器功能创建人员:失败

以下是来自#2的事务处理器函数的片段:

let corporateIdExpected = personDetails.corporate;

if(corporateIdExpected && corporateIdExpected != '') {
    let corporateRetrieved = await query("GetCorporateByCorporateId", {corporateId: corporateIdExpected});
    if(!corporateRetrieved || corporateRetrieved == '') {
        throw new Error("Corporate details not valid. Please check if your corporate is present on the network.");
    }
}

来自我的queries.qry的片段:

query GetCorporateByCorporateId {
  description: "Returns all corporates in the registry"
  statement:  
      SELECT  org.samplenetwork.participants.Corporate
          WHERE (corporateId == _$corporateId)
}

所以,当我尝试#2时,我收到以下错误:

错误:2 UNKNOWN:执行chaincode时出错:事务返回失败:错误:错误:http:读取关闭的响应正文

但是,当我尝试直接从swagger执行查询时,它会成功运行。

我正在使用:

Hyperledger Fabric:1.1 Hyperledger Composer:0.19.8

我错过了任何检查或步骤吗?

hyperledger-fabric hyperledger hyperledger-composer
1个回答
1
投票

对于第2项 - 您实际上并不需要每次都执行命名查询。

您可以执行等效检查(“他是否已经存在?”),如下所示(其中trxn是您的事务定义中定义的事务对象等):

const personRegistry = await getParticipantRegistry('org.acme.example.Person');
console.log("The person identifier to check is " + trxn.corporate.getIdentifier() ) 

const exists = await personRegistry.exists(trxn.corporate.getIdentifier() ) ;

console.log("exists is set to " + exists); // boolean

if (exists)
        console.log("he exists") 
else
        console.log("he doesn't exist");
© www.soinside.com 2019 - 2024. All rights reserved.