未定义的变量,nodejs,json 到程序变量

Undefined variable, nodejs, json to program variable

我决定以肮脏的方式将数据保存到 .json 文件中。出于某种原因,当我 运行 我的 index.js 文件 运行 我写的其他模块时,它说我在一个单独的模块中初始化的特定变量未定义(我希望的一个参考 json)。我的程序的结构是标准索引文件,它从我编写的模块中加载函数并通过端点执行它们。

.json 文件

{"blocks":[{"GENESIS_DATA":{"timestamp":1,"lastHash":"v01d","hash":"?M=(((Position-1)=>ter)=>sen)=>non?","difficulty":20,"nonce":0,"data":[]}}]}

我想获取名为 GENESIS_DATA 的数组的第一个索引,并将其用作我程序中的数组...

来自区块链索引的相关代码(不是我为程序执行的文件运行)

const { REWARD_INPUT, MINING_REWARD, GENESIS_DATA } = require('../config');
const fs = require('fs');
const jsonRoute = '/home/main/public_html/Cypher-Network/CDSM/CDSM.json';

class Blockchain {
  constructor() {
fs.readFile(jsonRoute, 'utf-8', function(err, data) {
    if (err) throw err;

    this.jsonChain = JSON.parse(data);
    const genesis = jsonChain.blocks[0];
});
    this.chain = [genesis];
  }

/*Alot more code down here but let's assume that the bracket for class Blockchain is completed*/
}

错误日志

/home/main/public_html/Cypher-Network/blockchain/index.js:32
    this.chain = [genesis]; //we are taking the first element of the json file (genesis block)
                  ^

ReferenceError: genesis is not defined
    at new Blockchain (/home/main/public_html/Cypher-Network/blockchain/index.js:32:19)
    at Object.<anonymous> (/home/main/public_html/Cypher-Network/index.js:28:20)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
main@goldengates.club [~/public_html/Cypher-Network]#

首先,常量起源是回调的本地变量,因此它会在回调完成后立即销毁 运行。 此外,即使常量是在回调之外声明的,请记住 fs.readFile 是异步的,因此当 readFile 正在读取包含数据的文件时,常量 genesis 已经被设置为未定义。