【问题标题】:Node export object with data from file带有文件数据的节点导出对象
【发布时间】:2016-05-25 19:06:37
【问题描述】:

我正在导出以下对象,该对象从文件中初始化其数据

function wordsBox(){
    this.words= {};
}

var w = new wordsBox();

fs.readFile('words.txt', function (err, data) {
    w.words = JSON.parse(data.toString());
});

module.exports = w;

但是,当我尝试从另一个文件访问数据时,它没有读取。

var wordsBox = require('../db/word.reader');
console.log(wordsBox.words);

下面出来的是一个空对象。所以,fs读完数据后,有没有办法导出对象。

【问题讨论】:

  • 在“其他”文件中,您没有等待足够长的时间让模块中的 readFile 完成。由于您没有给自己一个承诺或回调,因此您必须使用 setTimeout 进行猜测(或修改模块以具有回调)
  • 是在 readFile 完成时调用回调的最佳方法吗?
  • 我不会说这是“最好”的方式,但它是两种方式之一。

标签: javascript node.js filereader


【解决方案1】:

您必须使用 fs.readFile 的同步版本:

... 
var data = fs.readFileSync('words.txt')
w.words = JSON.parse(data.toString())

要求(“加载”)其他模块是同步操作。如果您想从外部资源填充数据,您也必须同步进行。但是,我建议使用模块的显式(和可选的异步)初始化来利用测试并避免意外的副作用。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2019-07-09
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多