node.js - 结构链码方法中的可选参数
问题描述
我正在为结构网络开发一个简单的 nodejs 链代码,我希望链代码的一种方法具有可选参数。
该设置是一个扩展类fabric-contract-api
:
'use strict';
const { Contract} = require('fabric-contract-api');
class testContract extends Contract {
// chaincode methods
}
我尝试了 2 种方法,但都失败了:
- 我期待它遵循可选参数的 nodejs 表示法,所以:
async getAllMarks(ctx, studentId, subject = null) {
// return marks
}
但是,如果我用 2 个参数调用链码,我会收到一条错误消息,指出只需要 1 个参数。
- 然后我尝试了一种解决方法,记住一个未设置的函数参数是
undefined
和undefined == null
在 js 中:
async getAllMarks(ctx, studentId, subject) {
if (subject != null) {
// filter marks for subject
}
// return marks
}
在这种情况下,如果它只有 1 个参数,则调用失败,预期为 2。
那么:这是否意味着在结构链码中不可能有可选参数,或者我错过了什么?
解决方案
我可以想到两个选择:
- 从您的客户端以“”或类似名称明确发送
subject
,并在您的链代码中适当地参加。 - 只发送一个参数,一个带有 2 个字段(
studentID
和subject
)的 JSON 对象。如果你愿意,那么subject
可能是可选的。
我通常使用第二种方法(我的链码是用 Go 编写的,但它必须与 NodeJS 相同)。我觉得它更干净(虽然它可能有点慢)。
一般来说,不要在那个入口点以非常以 NodeJS 为中心的方式思考。您可能有 Go/NodeJS/Java 链代码和 NodeJS/Java 客户端以兼容的方式通过 GRPC 进行通信。
推荐阅读
- visual-studio - 无法创建 IOS 存档:路径(目录名必须少于 248 个字符)和/或文件名(必须少于 260 个字符)太长
- wordpress - WordPress:如何获取“init”钩子的完整路径?或者它是另一个更好的钩子?
- python - Pytorch 错误:优化器在 Linux 服务器上得到了一个空参数列表
- angular - Angular slickgrid 自定义日期过滤器不适用于日期范围
- c# - 即使在 C# 的显式构造函数中未指定默认值,如何初始化
- json - 如何从 AMFPHP 库中获取 Json 响应?
- python - 如何计算两个相似文件的相同哈希?
- python - Django ModelForm 保存到另一个数据库
- laravel - Laravel:自定义数组验证取决于先前选择的值
- ssl-certificate - 使用 ddev 环境中的主机证书连接远程系统