Hyperledger Fabri c API возвращает данные типа буфера, как мне преобразовать буфер в строку этих данных в javascript - PullRequest
0 голосов
/ 07 мая 2020

я создаю блокчейн на Hyperledger fabri c (node.js SDK).

https://hyperledger.github.io/fabric-sdk-node/release-1.4/global.html#BlockchainInfo__anchor

я вызываю API BlockchainInfo и получите ответ в формате json, который включает currentBlockHa sh

официальный документ показывает, что ответ тип данных из currentBlockHa sh равно Array

, например, следующие данные.

Я хотел бы преобразовать этот буфер в строку, но понятия не имею, что делать.

спасибо за то, что вы прочитали вопрос.

{ buffer:
   { type: 'Buffer',
     data:
      [ 8,
        207,
        230,
        17,
        18,
        32,
        124,
        143,
        73,
        40,
        171,
        42,
        251,
        237,
        193,
        138,
        36,
        92,
        58,
        57,
        254,
        56,
        144,
        96,
        54,
        201,
        242,
        64,
        10,
        111,
        150,
        28,
        198,
        187,
        196,
        118,
        97,
        160,
        26,
        32,
        16,
        160,
        154,
        19,
        11,
        179,
        147,
        11,
        38,
        16,
        150,
        190,
        126,
        17,
        121,
        123,
        200,
        7,
        71,
        27,
        241,
        103,
        54,
        188,
        196,
        248,
        178,
        88,
        48,
        115,
        186,
        133 ] },
  offset: 6,
  markedOffset: -1,
  limit: 38,
  littleEndian: true,
  noAssert: false }

вот данные исходного ответа

{"height":{"low":291663,"high":0,"unsigned":true},"currentBlockHash":{"buffer":{"type":"Buffer","data":[8,207,230,17,18,32,124,143,73,40,171,42,251,237,193,138,36,92,58,57,254,56,144,96,54,201,242,64,10,111,150,28,198,187,196,118,97,160,26,32,16,160,154,19,11,179,147,11,38,16,150,190,126,17,121,123,200,7,71,27,241,103,54,188,196,248,178,88,48,115,186,133]},"offset":6,"markedOffset":-1,"limit":38,"littleEndian":true,"noAssert":false},"previousBlockHash":{"buffer":{"type":"Buffer","data":[8,207,230,17,18,32,124,143,73,40,171,42,251,237,193,138,36,92,58,57,254,56,144,96,54,201,242,64,10,111,150,28,198,187,196,118,97,160,26,32,16,160,154,19,11,179,147,11,38,16,150,190,126,17,121,123,200,7,71,27,241,103,54,188,196,248,178,88,48,115,186,133]},"offset":40,"markedOffset":-1,"limit":72,"littleEndian":true,"noAssert":false}}

1 Ответ

0 голосов
/ 07 мая 2020

Я думаю, что JSDo c в данном случае вводит в заблуждение. Я думаю, что currentBlockHash на самом деле будет буфером Node.js (или, возможно, реализацией protobuf, которая имитирует поведение буфера). Вы можете преобразовать буфер в строку, вызвав currentBlockHash.toString().

Я наблюдал некоторые случаи, когда вызов toString () в реализации буфера protobuf дает отладочную строку, а не строковое представление содержимого буфера поэтому я предпочитаю указывать аргумент кодировки на всякий случай.

В случае ha sh может быть удобнее рассматривать его как шестнадцатеричную строку, а не как utf8 (который был бы по умолчанию) в любом случае, я бы попробовал currentBlockHash.toString('hex')

Подробнее о буферах см. здесь: https://nodejs.org/docs/latest-v10.x/api/buffer.html

...