Произошла ошибка при закреплении файла в IPFS: Ошибка типа [ERR_INVALID_ARG_TYPE]: Аргумент «url» должен иметь тип string

#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, я удалил синтаксис экспорта, и все работало как по волшебству!