TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。接收类型未定义
TypeError [ERR_INVALID_ARG_TYPE]: The “path” argument must be of type string. Received type undefined
我正在尝试在 nodejs 中使用 fabricsdk 安装链代码。 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 参数下提供哪条路径?容器路径还是本地路径?
更多信息:我从余额转账示例应用程序中获取了代码块,但做了一些更改,例如从输入中读取组织详细信息而不是使用连接配置文件。我可以使用上述方法创建频道、加入频道、更新频道、实例化链码,但在安装链码时会抛出错误。
上面的问题是在我们没有设置gopath的情况下出现的。我们可以在发送请求之前使用下面的process.env.GOPATH = 'YOUR_GOPATH_HERE'
设置。
如果我们使用java chaincode,那么你不需要设置任何路径:)
我正在尝试在 nodejs 中使用 fabricsdk 安装链代码。 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 参数下提供哪条路径?容器路径还是本地路径?
更多信息:我从余额转账示例应用程序中获取了代码块,但做了一些更改,例如从输入中读取组织详细信息而不是使用连接配置文件。我可以使用上述方法创建频道、加入频道、更新频道、实例化链码,但在安装链码时会抛出错误。
上面的问题是在我们没有设置gopath的情况下出现的。我们可以在发送请求之前使用下面的process.env.GOPATH = 'YOUR_GOPATH_HERE'
设置。
如果我们使用java chaincode,那么你不需要设置任何路径:)