2

作为测试场景的一部分,我想使用一些大型 JSON 对象。我想将它们存储在一个单独的目录中,然后根据需要导入每个对象。

目前我正在使用以下方法:

var t1 = require('./sample_data/t1.json')

var t2 = require('./sample_data/t2.json')

但是我看到过时的数据,我猜是因为需要缓存。

我已经尝试导出每个对象,但是我得到了一个围绕我需要的 JSON 的包装器对象,这会破坏我的测试

任何人都可以建议吗?有一个更好的方法吗?

问候,本。

更新:我的问题是我在调整存储的 JSON 时看到了缓存的结果

4

2 回答 2

4

我不知道它是否是更好的方法,但您也可以使用文件系统模块来做到这一点,如下所示:

fs.readFile('./sample_data/t1.json', function (err, data) {
  if (err) throw err;
  t1 = JSON.parse(data);
});

更新:

就像 Nirk 说的,有一个同步版本的 fs.readFile。如果您想使用该版本,您的代码应如下所示:

t1 = JSON.parse(fs.readFileSync('./sample_data/t1.json'));
于 2013-08-16T14:24:18.077 回答
2

你的怀疑是正确的。

require()缓存模块;它只会从磁盘读取每个文件一次。

你可以像这样打破这个缓存:

delete require.cache[require.resolve('...')];

或者,您可以使用fs模块自己读取文件,然后调用JSON.parse().
确保正确传递相对或绝对路径(您可能需要调用require.resolve())。

于 2013-08-16T14:32:17.687 回答