2017-04-20 5 views
0

私はオブジェクト "部屋"を持っていて、そのコンテンツをファイル "logging.json"に10秒ごとに印刷しようとしています。SetTimeout + fs.writeFileは私のオブジェクトを消去します

setTimeout(function(){ 
    fs.writeFile('./logging.json',JSON.stringify(rooms,null,'\t'),function(err) { 
    if(err) return console.error(err); 
    console.log('done'); 
    }); 
}, 10000); 

初めて(10秒後)動作し、ファイルlogging.jsonが完了しました。しかし、関数が呼び出された2回目に、オブジェクト "rooms"の内容が消去され、取得したlogging.jsonファイルも空になります。

また、私のプログラムの残りの部分は、この部分のコードと正しく動作するので、他のものから来ているとは思われません。

なぜ私はこれをどうやって解決するのか教えてください。

EDIT:私の部屋のオブジェクトを印刷しようとすると、これがコンソールに表示されます。

[nodemon] restarting due to changes... 
[nodemon] starting `node serveur.js` 
[ { username: 'Bob', message: 'Hello' }, 
done 
[nodemon] restarting due to changes... 
[nodemon] starting `node serveur.js` 
[] 
done 

また、なぜ10秒ごとにサーバを復元するのかわかりませんが、それは想定されていません。

+0

ではなくappendfileはを使用するかのWriteFileのような「」フラグを追加してみてください(ファイル、データ、{'フラグ': 'a'}、関数) – Vanojx1

+0

appendFileと同じこと、私のオブジェクトは再び消去されます。 – Mit

+0

私はあなたのコードを実行します。もう一度OKです。 あなたのプログラムは部屋を消去していますか? 詳細を追加できますか?またはより多くのコード? – Gor

答えて

2

nodemonを使用しているため、書き込みするファイルを無視するようにnodemonに指示する必要があります。そうしないと、すべてのアプリケーションがファイルを更新するたびにアプリが再起動します。

nodemon --ignore logging.json app.js 

またはあなたのnodemon設定を更新して:これは、このようなコマンドラインを介して行うことができます。

この機能を10秒ごとに実行する場合は、setTimeoutではなくsetIntervalを使用する必要があります。 setTimeoutは10秒で1回だけ実行されます。 10秒ごとにファイルを追加するには

const fs = require('fs') 

let count = 0 

setInterval(function() { 
    fs.writeFile('./test.txt', count, function (err) { 
     if(err) { 
      console.log(err) 
     } 
    }) 
}, 10000) 

:ファイルに10秒ごとに、すべてのコンテンツを置き換えるために

const fs = require('fs') 

let count = 0 

setInterval(function() { 
    const text = count++ + '\n' 
    fs.appendFile('./test.txt', text, function (err) { 
     if(err) { 
      console.log(err) 
     } 
    }) 
}, 10000) 
+0

はいすべてのファイルを置き換えたいです。私もsetIntervalで試してみましたが、同じ結果が得られます... – Mit

+0

@Mitああ。だから、10秒ごとにファイルの内容をroomsオブジェクトに置き換えたいのですか? – dan

+0

はい、オブジェクトがおそらくそれ以降更新されたことを知っています。 – Mit

関連する問題