类型错误[ERR_INVALID_ARG_TYPE]。路径 "参数必须是字符串类型。接收到的类型未定义

问题描述 投票:0回答:1

我试图在nodejs中使用fabricdk安装chaincode,installchaincode函数抛出以下错误。

TypeError [ERR_INVALID_ARG_TYPE]: The “path” argument must be of type string. Received type undefined 

下面是代码。

exports.installChaincode =
    async function() {
  let errorMessage = null;
  try {
    // first setup the client for this org
    var client = new Client();
    let serverCertPeer = await storageUtil.getFileContent(
        '/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem',
        'fabriccerts');
    let peer = client.newPeer('grpcs://IPADDRESS:7051', {
      'pem': Buffer.from(serverCertPeer).toString(),
      'ssl-target-name-override': 'peer0.org1.example.com'
    });
    var request = {
      targets: [peer],
      chaincodePath: 'github.com/chaincode/fabcar/go',
      chaincodeId: 'fabcar',
      chaincodeVersion: '5.0',
      chaincodeType: 'golang'
    };
    let results = await client.installChaincode(request);
    // the returned object has both the endorsement results
    // and the actual proposal, the proposal will be needed
    // later when we send a transaction to the orederer
    var proposalResponses = results[0];
    var proposal = results[1];

    // lets have a look at the responses to see if they are
    // all good, if good they will also include signatures
    // required to be committed
    for (const i in proposalResponses) {
      if (proposalResponses[i] instanceof Error) {
        errorMessage = util.format(
            'install proposal resulted in an error :: %s',
            proposalResponses[i].toString());
        console.log(errorMessage);
      } else if (
          proposalResponses[i].response &&
          proposalResponses[i].response.status === 200) {
        console.log('install proposal was good');
      } else {
        all_good = false;
        errorMessage = util.format(
            'install proposal was bad for an unknown reason %j',
            proposalResponses[i]);
        console.log(errorMessage);
      }
    }
  } catch (error) {
    console.log(
        'Failed to install due to error: ' + error.stack ? error.stack : error);
    errorMessage = error.toString();
  }

  if (!errorMessage) {
    let message = util.format('Successfully installed chaincode');
    console.log(message);
    // build a response to send back to the REST caller
    const response = {success: true, message: message};
    return response;
  } else {
    let message = util.format('Failed to install due to:%s', errorMessage);
    console.log(message);
    const response = {success: false, message: message};
    return response;
  }
}

好像很多人在社区里遇到过这个问题,但是没有任何地方提供解决方案。我们应该在 chaincodepath param 下提供哪个路径?容器路径还是本地路径?

更多信息。我从余额宝示例应用中提取了代码块,但做了一些改动,比如从输入中读取org的详细信息,而不是使用连接配置文件。我可以使用上述方法创建channel、加入channel、更新channel、实例化chainincode,这一切都很好,但是当涉及到chainincode的安装时,它就会出现错误。

node.js hyperledger-fabric filepath hyperledger-fabric-sdk-js
1个回答
0
投票

当我们没有设置gopath的时候,就会出现上述问题。我们可以使用下面的方法进行设置 process.env.GOPATH = 'YOUR_GOPATH_HERE' 前发送请求。

如果我们使用java chaincode,那么你不需要设置任何路径:)

© www.soinside.com 2019 - 2024. All rights reserved.