getHistoryForKey() Hyperledger fabric 从 Buffer nodejs 获取交易

getHistoryForKey() Hyperledger fabric get transactions from Buffer nodejs

我正在尝试使用方法 getHistoryForKey() 获取 nodejs 中值的事务和修改,但是当我尝试查看链代码响应时 这是返回的数据:

{ type: 'Buffer',
  data: [ 91, 111, 98, 106, 101, 99, 116, 32, 79, 98, 106, 101, 99, 116, 93 ] }

但是我无法访问交易详情。

这是我用来从链代码中获取交易详细信息的代码

    const result = await contract.evaluateTransaction('getHistory', req.params.id.toString());
    let resultStr=JSON.stringify(result);
    console.log(JSON.parse(resultStr));
    console.log(JSON.parse(resultStr).data.toString());

你知道如何访问数据吗? 谢谢

result 将是一个 Buffer 对象。您可以使用 .toString() 将其转换为 javascript 字符串,即 result.toString()。由于您调用的事务定义了返回的结果,因此您需要了解事务返回的内容,例如它可能是一个 JSON 字符串,因此要将其转换为 Javascript 对象,您可以使用 JSON.parse.

好的,我找到了解决方案,问题是返回的对象应该在返回 Buffer 之前迭代

这段代码适合我。

 let iterator = await ctx.stub.getHistoryForKey(id);
    let result = [];
    let res = await iterator.next();
    while (!res.done) {
      if (res.value) {
        console.info(`found state update with value: ${res.value.value.toString('utf8')}`);
        const obj = JSON.parse(res.value.value.toString('utf8'));
        result.push(obj);
      }
      res = await iterator.next();
    }
    await iterator.close();
    return result;