Получение ошибки: http: чтение закрытого тела ответа от функции Transaction Processor в Hyperledger Composer - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть фабричная сеть с простым 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.");
    }
}

Фрагмент из моих запросов.qry:

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

Итак, я получаю следующую ошибку при попытке # 2:

Ошибка: 2 НЕИЗВЕСТНО: ошибка при выполнении цепного кода: транзакция возвращена с ошибкой: Ошибка: Ошибка: http: чтение в закрытом теле ответа

Однако, когда я пытаюсь выполнить запрос прямо из чванства, он успешно выполняется.

Я использую:

Hyperledger Fabric: 1.1 Композитор Hyperledger: 0.19.8

Я пропускаю какие-либо проверки или шаги для этого?

1 Ответ

0 голосов
/ 07 сентября 2018

для пункта 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");
...