首页 > 解决方案 > 结构链码方法中的可选参数

问题描述

我正在为结构网络开发一个简单的 nodejs 链代码,我希望链代码的一种方法具有可选参数。

该设置是一个扩展类fabric-contract-api

'use strict';
const { Contract} = require('fabric-contract-api');
class testContract extends Contract { 
    // chaincode methods
}

我尝试了 2 种方法,但都失败了:

    async getAllMarks(ctx, studentId, subject = null) {
        // return marks
    }

但是,如果我用 2 个参数调用链码,我会收到一条错误消息,指出只需要 1 个参数。

    async getAllMarks(ctx, studentId, subject) {
        if (subject != null) {
            // filter marks for subject
        }
        // return marks
    }

在这种情况下,如果它只有 1 个参数,则调用失败,预期为 2。

那么:这是否意味着在结构链码中不可能有可选参数,或者我错过了什么?

标签: node.jshyperledger-fabrichyperledger-chaincode

解决方案


我可以想到两个选择:

  1. 从您的客户端以“”或类似名称明确发送subject,并在您的链代码中适当地参加。
  2. 只发送一个参数,一个带有 2 个字段(studentIDsubject)的 JSON 对象。如果你愿意,那么subject可能是可选的。

我通常使用第二种方法(我的链码是用 Go 编写的,但它必须与 NodeJS 相同)。我觉得它更干净(虽然它可能有点慢)。

一般来说,不要在那个入口点以非常以 NodeJS 为中心的方式思考。您可能有 Go/NodeJS/Java 链代码和 NodeJS/Java 客户端以兼容的方式通过 GRPC 进行通信。


推荐阅读