2013-08-16 123 views
2

作爲測試場景的一部分,我想使用一些大的JSON對象。我想將它們存儲在一個單獨的目錄中,然後根據需要導入每個對象。Node.js - 使用JSON對象作爲變量

目前我使用下面的方法:

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

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

但是我看到過時的數據,即時猜測,由於需要緩存。

我曾嘗試導出每個對象,但是我再避開我所需要的JSON,打破我的測試

任何人都可以建議一個包裝對象?有一個更好的方法嗎?

問候,本。

UPDATE:我的問題是,我看到緩存的結果,因爲我捏捏存儲JSON

+0

究竟是什麼問題? – SLaks

+2

什麼是'奇怪的結果'? –

+0

已更新。對不清楚的道歉。 – Ben

回答

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')); 
+0

這是相對於當前目錄而不是JS文件。而且,這是異步的。 – SLaks

+1

@SLaks你可以使用'fs.readFileSync' – SheetJS

2

您的懷疑是正確的。

require() caches modules;它只會從磁盤讀取每個文件一次。

你可以打破這個緩存是這樣的:

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

或者,你可以閱讀使用fs模塊自己的文件,然後調用JSON.parse()
確保正確傳遞相對或絕對路徑(您可能需要撥打require.resolve())。