美文网首页
使用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执行查询操作

    由于在test-netword在执行./network.sh deployCC -l javascript已经部署...

  • 使用nodejs的SDK执行更新操作

    上一节讲了查询链码操作,这一节我们重点来讲解下更新链码的操作 打开$GOPATH/src/github.com/h...

  • mongodb文档查询操作

    mongodb使用find()方法执行查询操作, 语法 参数解析 query 可选,指定查询操作条件 proje...

  • AOP的注解

    使用xml配置 使用类 可以使用update执行删除,更新,保存操作 查询 或者使用jdbcTemplate自带的类型

  • MongoDB - 查询

    主要是说明mongodb的数据查询方法,本次不使用mongo shell来操作,使用图形化操作软件Robo来执行m...

  • MongoDB开发之 Shell基本操作

    引子 运行 数据库 查看当前数据库: 选择数据库: 创建 执行插入操作: 查询 查询单条数据: 更新 执行查询操作...

  • Python操作Mysql(PyMySQL)

    使用的相关函数 执行事务函数 查询操作函数 操作示例 数据库连接 使用with使代码更整洁。 创建数据库表TABL...

  • sdkman管理——linux

    安装 使用 查询可用版本 sdk list springboot 安装可用版本 sdk install sprin...

  • MySQL-MyISAM表锁引起慢查询

    场景 模拟并发场景下,其中一个会话在执行更新表操作,同时另一个会话执行查询操作。该查询操作本身很简单,查询的数据量...

  • mongodb学习3

    Nodejs 操作 MongoDb数据库 在 Nodejs 中使用 MongodbNodejs 连接 MongoD...

网友评论

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

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