javascript - 将文件固定到 IPFS 时发生错误:TypeError [ERR_INVALID_ARG_TYPE]:“url”参数必须是字符串类型
问题描述
当我将文件添加到另一个项目时,我收到以下错误,我不知道为什么。
当我运行“node scripts1/runScript.js”错误时,我得到的是:
Error occurred while pinning file to IPFS: TypeError [ERR_INVALID_ARG_TYPE]: The "url" argument must be of type string. Received undefined
at new NodeError (node:internal/errors:371:5)
at validateString (node:internal/validators:119:11)
at Url.parse (node:url:169:3)
at Object.urlParse [as parse] (node:url:156:13)
at dispatchHttpRequest (C:\Users\alaiy\Documents\NFTs\nft-mix-main\node_modules\axios\lib\adapters\http.js:118:22)
at new Promise (<anonymous>)
at httpAdapter (C:\Users\alaiy\Documents\NFTs\nft-mix-main\node_modules\axios\lib\adapters\http.js:48:10)
at dispatchRequest (C:\Users\alaiy\Documents\NFTs\nft-mix-main\node_modules\axios\lib\core\dispatchRequest.js:58:10)
at Axios.request (C:\Users\alaiy\Documents\NFTs\nft-mix-main\node_modules\axios\lib\core\Axios.js:108:15)
at wrap (C:\Users\alaiy\Documents\NFTs\nft-mix-main\node_modules\axios\lib\helpers\bind.js:9:15) {
code: 'ERR_INVALID_ARG_TYPE'
}
runScript.js 代码是:
const path = require('path');
const pinFileToIPFS = require('./pinFileToIPFS');
const filePath = path.join(__dirname, '../img/Toad-Licking-Mario.jpg');
// const filePath = path.join(__dirname, '../data/metadata.json');
pinFileToIPFS(filePath);
包含“url:pinataEndpoint”的 pinFileToIPFS.js 文件我认为错误消息也指的是:
require('dotenv').config();
const fs = require('fs');
const axios = require('axios');
const FormData = require('form-data');
const { storeDataToFile } = require('./ipfsHelper.js');
// Calls Pinata API's to pin file to IPFS
const pinFileToIPFS = async (filePath) => {
const pinataEndpoint = process.env.PINATA_ENDPOINT;
const pinataApiKey = process.env.PINATA_API_KEY;
const pinataApiSecret = process.env.PINATA_API_SECRET;
const form_data = new FormData();
try {
form_data.append('file', fs.createReadStream(filePath));
const request = {
method: 'post',
url: pinataEndpoint,
maxContentLength: 'Infinity',
headers: {
pinata_api_key: pinataApiKey,
pinata_secret_api_key: pinataApiSecret,
'Content-Type': `multipart/form-data; boundary=${form_data._boundary}`,
},
data: form_data,
};
console.log('request:', request);
const response = await axios(request);
console.log('Successfully pinned file to IPFS : ', response);
await storeDataToFile(response.data);
console.log('Successfully added IPFS response to json file');
} catch (err) {
console.log('Error occurred while pinning file to IPFS: ', err);
}
};
module.exports = pinFileToIPFS;
最后我的 .env 文件是:
# export PRIVATE_KEY=asafdagadd
# export WEB3_INFURA_PROJECT_ID=asdfsdf
# export ETHERSCAN_TOKEN=asdfasdfasdf
export IPFS_URL=blah blah
export UPLOAD_IPFS=true
export PINATA_API_KEY='blah blah'
export PINATA_API_SECRET='blah blah'
export PINATA_ENDPOINT="https://api.pinata.cloud/pinning/pinFileToIPFS"
如果需要,我也可以上传 package.json 文件。
任何帮助表示赞赏!
解决方案:原来我在 .env 文件中使用的导出语法不应该存在。导出语法适用于我之前使用的 python 脚本。
当我运行 javascript 脚本时,我删除了导出语法,一切都像魅力一样!
解决方案
我遇到了同样的错误,我发现我的配置文件夹应该在我从中执行它的文件夹中。当您的 url 值未获取 env 变量时,会出现此错误。
所以在我的情况下,解决方案是这样的 -
配置/
--default.json
脚本/
--server.js
所以它在脚本文件夹中搜索配置文件夹。
后来我从脚本文件夹之外运行我的文件,然后它工作正常。
节点脚本/server.js
推荐阅读
- javascript - 在 HTML/JS 中预览和计数 A4 页面
- python - Python得到错误“UnicodeDecodeError:'utf-8'编解码器无法解码位置10的字节0xad:无效的起始字节”
- iis - 加密 web.config 连接字符串部分时指定特定证书
- java - 如何在 ListView 中从 ArrayList 设置 CardViews
- laravel - 在验证中获取外键的值选择
- java - 通用可比合并排序算法上的 Stackoverflow 错误
- r - 将集群合并到最低的集群
- angular - 在 Rxjs 的扫描操作符中,是否可以从扫描操作符创建的内部累加器中删除一个项目?
- html - HTML中的vbscript方法GetAbsolutePathName()不返回HTML文档的当前路径
- aws-device-farm - Device Farm 测试上传状态永远处于“初始化”状态