2016-08-22 1 views
-1

私はノードjsで実行時に値を更新する必要がありますか?

var some_data=require('../objects/some_data.json'); 

function(){ 
    //something here to change data of some_data.json - fs.write 
    //vl this affect value of some_data at this point ? 
} 

ないようなものを持っているが、ファイルへのアクティブな参照を保持するか、必要としながら、一度だけ、それを読み込む必要が?

それがアクティブリファレンスを保持した場合、どのように私はSOME_DATA

+0

それはいくつかのデータに影響を与えませんでした、btwありがとうございました –

答えて

2

ファイルを読み込み、開始時の状態を読み込みます。 jsonファイルに行っている変更は一切行いません。

例えば、

{ 
    "a": "b" 
} 

a.jsonこのJSONでこの

var b = require("./a.json"); 
for (var i = 0; i< 1000000; i++) { 
    console.log(b.a); 
} 

を実行し、ループにしながら値を変更する - か、ファイルを削除します。それでも動作します。

+0

しかし、私のsome_dataによると、@ mikemaccanaの回答と矛盾しているが、彼の答えからは、私はそれが –

+0

だと思います。いいえ、それは... @aishwatsingh – baao

+0

@aishwatsinghファイルの変更は効果がありません。同じ必要なオブジェクトに変更を加えると効果があります。 – HeadCode

0

の古い値を保持することができますこれは、アクティブな参照を保持します。つまり、requireによってロードされるオブジェクトはシングルトンです。 https://nodejs.org/api/modules.html#modules_loading_from_node_modules_foldersから

モジュールは、彼らがロードされた最初の時間の後にキャッシュされます。

require( 'foo')を複数回呼び出しても、モジュールコードが複数回実行されることはありません。

では、次の内容でdeleteme.jsonをファイルと呼ばれていると言う:

{ 
    "key": "value" 
} 

は再びそれを必要とし、それを変更する、のは、それを必要としてみましょう:

var data = require('./deleteme.json') 
data.key = "newvalue" 
data = require('./deleteme.json') 
console.log(data) 

あなたはそれが表示されますログnewvalue - オブジェクトが再読み込みされないため、元のままメモリに残ります。

ファイルを削除するように頼んだので、ファイルはメモリ内にあるので削除できます。ファイルの削除は、ノードを再起動してモジュールを初めてロードするときにのみ停止します。

+0

私はそのsome_dataにjsonオブジェクトを直接ロードしています、それは良いアプローチです、また、あなたはabt EDITの部分を言うことができますか? –

+0

@aishwatsingh私は、これを説明するためにオブジェクトを編集していることを示すテストコードをいくつか追加しました。 – mikemaccana

+0

なぜ下降者が説明するの? – mikemaccana

関連する問題