美文网首页
使用nodejs的SDK执行查询操作

使用nodejs的SDK执行查询操作

作者: 凡星_ | 来源:发表于2020-05-23 16:14 被阅读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,否则追究其法律责任

    相关文章

      网友评论

          本文标题:使用nodejs的SDK执行查询操作

          本文链接:https://www.haomeiwen.com/subject/tvclahtx.html