使用nodejs的SDK执行查询操作

由于在test-netword在执行./network.sh deployCC -l javascript 已经部署好了链码,因此我们直接查询已经安装的链码就好。

同前两节一样,我们重点来讲解下查询链码的代码

打开$GOPATH/src/github.com/hyperledger/fabric-samples/fabcar/javascript/query.js 文件,我们来看看代码。

首先下面部分代码同admin基本一样,不在详述。

'use strict';

const { Gateway, Wallets } = require('fabric-network');
const fs = require('fs');
const path = require('path');

async function main() {
    try {
    // 业务内容部分
    } catch (error) {
        console.error(`Failed to evaluate transaction: ${error}`);
        process.exit(1);
    }
}

main();

我们重点来看看业务内容部分

第一部分:加载test-network网络中组织1的的连接配置信息

同上一节一样,它获取到connection-org1.json的参数并转为json格式

        const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations', 'peerOrganizations', 'org1.example.com', 'connection-org1.json');
        const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8'));

第二部分:创建一个新的基于文件系统的钱包来管理身份

同上一节,先获取到钱包的目录路径并实例化一个钱包对象

        const walletPath = path.join(process.cwd(), 'wallet');
        const wallet = await Wallets.newFileSystemWallet(walletPath);
        console.log(`Wallet path: ${walletPath}`);

第三部分:查看我们是否已经注册了用户用户

判断wallet目录下是否已经存在appUser.id这个文件,存在就表示这个用户已经注册过

        const identity = await wallet.get('appUser');
        if (!identity) {
            console.log('An identity for the user "appUser" does not exist in the wallet');
            console.log('Run the registerUser.js application before retrying');
            return;
        }

如果还没有注册,会提示先注册用户再执行这一步。

第四部分:创建一个新的网关并连接到我们的对等(peer)节点

根据ccp的参数可知,它连接的的peer节点是网址为org1.example.com的节点

        const gateway = new Gateway();
        await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: true } });

第五部分:连接到通道上

我们之前使用createChannel命令生成了默认的mychannel通道,并在上面部署了链码,因此我们需要先连接到mychannel的通道上

     const network = await gateway.getNetwork('mychannel');

第六部分:连接到合约上

连接到我们之前部署到mychannel通道上的fabcar合约,这个合约是之前通过/network.sh deployCC -l javascript命令部署的

    const contract = network.getContract('fabcar');

第七部分:执行合约的查询方法

fabcar合约提供了两个查询方法

  • queryCar 方法是查询某个编号的汽车,它需要一个参数,如('queryCar', 'CAR4')
  • queryAllCars 方法是查询所有的汽车列表,它不需要参数

下面我们直接以queryAllCars为例子的写法

        const result = await contract.evaluateTransaction('queryAllCars');
        console.log(`Transaction has been evaluated, result is: ${result.toString()}`);

本文由小韦云原创,转载请注明出处:https://www.bctos.cn/doc/4/1840,否则追究其法律责任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值