背景
基于fabric1.0搭建了一个区块链网络(1order,2org,4peer,1cli),安装本地chaincode之后,通过cli容器调用chaincode正常。然后编写getUserInfo.js(因为安装到网络中的chaincode有一个获取所有用户信息的功能)来获取用户信息。
问题描述
在cli容器中通过命令:
peer chaincode query -C mychannel -n mycc -c '{"Args":["getUserInfo","1001"]}'
获取信息正常,通过运行js脚本:
node getUserInfo.js
出现错误:
Error: Failed to connect before the deadline URL:grpcs://localhost:7051
详细报错结果如下图所示:
(上图是通过网页来调用getUserInfo.js,后台出现的错误代码,与直接运行运行node getUserInfo.js的报错结果一致,可怜我只保留了上图!)
解决办法
该问题的主要解决思路有以下几点:
1.检查node npm的版本
这种错误一般是fabric版本与node npm不匹配导致的,fabric版本目前最新1.4,如果用老版本的话node 和npm版本不能过高,可参考我最终运行成功的版本:
fabric 1.0.0
node 8.12.0
npm 6.4.1
同时还要注意js代码里面调用的fabric-ca-client与fabric-client还有grpc等依赖包的版本,下面是我的版本
"grpc": "^1.6.0",
"fabric-ca-client": "^1.0.0",
"fabric-client": "^1.0.0"
2.确定版本后npm install导入依赖包
可以先删除以前的依赖包,然后重新导入
rm -r node_modules
npm install
3.如果版本更改之后还报错,运行一下如下面命令(重要!!!):
npm rebuild
运行后截图如下:
完成之后问题解决了!!!
结果如下:
通过读取表单信息向fabric网络发送请求
表单填入1001,该id为我之前插入区块链网络中的数据(用户信息)的key,通过向区块链网络发送key来获取相应的values.
然后获取返回结果如下:
也可以在cli容器中运行相应命令获取相同结果
命令如下:
peer chaincode query -C mychannel -n mycc -c '{"Args":["getUserInfo","1001"]}'
输出结果如下: