首页 > 解决方案 > 将数据存储到文件时发生错误 SyntaxError: JSON 输入意外结束

问题描述

我需要有关此错误的帮助:

Error occured while storing data to file SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at storeDataToFile (C:\Users\alaiy\Documents\NFTs\nft-demo-master\scripts\ipfsHelper.js:19:23)
    at async pinFileToIPFS (C:\Users\alaiy\Documents\NFTs\nft-demo-master\scripts\pinFileToIPFS.js:29:5)
Successfully added IPFS response to json file

我正在使用以下脚本将图像上传到 IPFS 站点(Pinata),然后将 IPFS 哈希添加到新的/现有的 json 文件中。任何帮助表示赞赏!

我有我的 dev.json 文件,它基本上说要将哈希添加到 ipfsHash.json 文件中。如果没有,则创建一个并添加:

    {
        "ipfsFile": {
            "location": "../data/ipfsHash.json"
          }
    }

我有我的 runScript.js 文件,它基本上调用了下面的 pinFiletoIPFS 文件:

    const path = require('path');
    const pinFileToIPFS = require('./pinFileToIPFS');
    
    const filePath = path.join(__dirname, '../assets/homer.jpg');
    // const filePath = path.join(__dirname, '../data/metadata.json');
    
    pinFileToIPFS(filePath);

这是有问题的脚本。我有 ipfsHelp.js 文件,它应该将数据添加到我的 json 文件中:

const fs = require('fs').promises;
const path = require('path');
const config = require('config');

// https://stackoverflow.com/questions/36856232/write-add-data-in-json-file-using-node-js
// Accepts json data and stores in specified filePath.
// If the file does not exists in specified location, it creates it
const storeDataToFile = async (jsonData) => {
  try {
    const filePath = path.join(__dirname, config.get('ipfsFile.location'));
    const ipfsFileExists = await fileExists(filePath);
    if (!ipfsFileExists) {
      console.log('ipfsFileExists: ', ipfsFileExists);
      // First time creating an empty file with [].
      // We will be storing all ipfsHashes as array of objects
      await fs.writeFile(filePath, JSON.stringify([]));
    }
    const data = await fs.readFile(filePath, 'utf8');
    const json = JSON.parse(data);
    json.push(jsonData);
    await fs.writeFile(filePath, JSON.stringify(json));
  } catch (err) {
    console.log('Error occured while storing data to file', err);
  }
};

async function fileExists(path) {
  try {
    const res = await fs.access(path);
    return true;
  } catch (err) {
    // no such file or directory. File really does not exist
    if (err.code == 'ENOENT') {
      return false;
    }
    console.log('Exception fs.statSync (' + path + '): ' + err);
    // some other exception occurred
    throw err;
  }
}

module.exports = {
  storeDataToFile,
  fileExists,
};

我用过这个模块:https ://www.npmjs.com/package/config

我的根文件夹中有一个配置文件夹,其中包含 json 文件。

不知道我做错了什么。

编辑:

由于为什么 process.env.NODE_ENV 未定义,我找到了解决方案?

该代码无法正常工作,因为我必须在 cmd 中键入以下内容,以在环境中设置变量!:

SET NODE_ENV=dev

标签: javascriptnode.jsjsonweb3ipfs

解决方案


推荐阅读