#javascript #node.js #npm #axios #ipfs
Вопрос:
Когда я добавляю файлы в другой проект, я получаю следующую ошибку, и я не могу понять, почему.
Когда я запускаю «узел 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:UsersalaiyDocumentsNFTsnft-mix-mainnode_modulesaxioslibadaptershttp.js:118:22) at new Promise (lt;anonymousgt;) at httpAdapter (C:UsersalaiyDocumentsNFTsnft-mix-mainnode_modulesaxioslibadaptershttp.js:48:10) at dispatchRequest (C:UsersalaiyDocumentsNFTsnft-mix-mainnode_modulesaxioslibcoredispatchRequest.js:58:10) at Axios.request (C:UsersalaiyDocumentsNFTsnft-mix-mainnode_modulesaxioslibcoreAxios.js:108:15) at wrap (C:UsersalaiyDocumentsNFTsnft-mix-mainnode_modulesaxioslibhelpersbind.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);
В pinFileToIPFS.js файл, содержащий «url: pinataEndpoint», я думаю, что сообщение об ошибке тоже относится:
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) =gt; { 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"
I can upload the package.json file aswell if needed.
Любая помощь будет признательна!
РЕШЕНИЕ: Оказалось, что синтаксиса экспорта, который я использовал в своем файле .env, там быть не должно. синтаксис экспорта предназначен для сценариев python, которые я ранее использовал.
Когда я запускаю сценарии javascript, я удалил синтаксис экспорта, и все работало как по волшебству!