使用nodejs的SDK执行查询操作

2020-05-23  本文已影响0人  凡星_

由于在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,否则追究其法律责任

上一篇 下一篇

猜你喜欢

热点阅读