2015-11-12 55 views
12

私はこのスクリプトを実行するためにnode-crontabを使用しています。 fs.writeFileはループが最初に上書きされますが、その後はデータが追加されます。私は書き込む前にファイルを削除しようとしましたが、同じことをしています、初めてそれを削除しますが、その後の実行では追加を開始します。私は何をすべきか?fs.writeFileファイルを上書きしない

これはスクリプトです:私は、私はあなたのコードの実行時にファイルが最初の場所に存在しない場合、私はエラーを取得...一つのことについては

var jobId = crontab.scheduleJob('* * * * *', function() { 
//Gettting system date and adding leading zeros when are single digits. I need this to build the get request with date filters. 

    var d = new Date(); 
    var nday = d.getDate(); 
    var nmonth = d.getMonth(); 
    var nhour = d.getHours(); 
    var nmin = d.getMinutes(); 

    var nfullyear = d.getFullYear(); 
    if (nday < 10) { 
     nday = '0' + nday; 
    }; 
    var nmin = nmin - 1; 
    if (nmin < 10) { 
     nmin = '0' + nmin; 
    }; 
    if (nhour < 10) { 
     nhour = '0' + nhour; 
    }; 

    var nmonth = nmonth + 1; 
    if (nmonth < 10) { 
     nmonth = '0' + nmonth; 
    }; 

    var options = { 
     url: 'https://[email protected]/v1/gpsdata' + '?fromdate=' + nfullyear + '-' + nmonth + '-' + nday + 'T' + nhour + '%3a' + nmin + '%3a' + '00', 
     method: 'GET', 
     rejectUnauthorized: !debug 
    }; 


// HTTP get request 
     request(options, function(error, response, body) { 
     if (error) throw new Error(error); 
     var result = JSON.parse(body)['gps-recs']; 

     console.log(result.length); 

     //create .csv file 
     buildCSV(result); 

    }); 
}); 

function buildCSV(result) { 


    //adding headers 
    csvFile = csvFile.concat('UserNumber' + ',' + 'UserTimeTag' + ',' + 'Latitude' + ',' + 'Longitude' + ',' + 'SpeedMph' + ',' + 'Heading' + ',' + 'Status' + '\r\n'); 
    // loop runs result.length times 
    for (var i = 0; i < result.length; i++) { 
     csvFile = csvFile.concat(result[i].UserInfo.UserNumber + ',' + result[i].UserTimeTag + ',' + result[i].Latitude + ',' + result[i].Longitude + ',' + result[i].SpeedMph + ',' + result[i].Heading + ',' + result[i].Status + '\r\n'); 

    }; 
    //delete file.csv first 
    console.log('before unlink: '); 
    fs.unlink('file.csv', function(err){ 
     if (err) throw err; 
     else { 
      console.log('file deleted'); 
      console.log(csvFile); 
      fs.writeFile('file.csv', csvFile, function(err) { 

      if (err) throw err; 
      console.log('file saved'); 

      }); 
     }; 

    }); 
}; 

答えて

19

をいくつかの環境変数をommited。以下の修正を参照してください。

あなたがそうのように明示的にオプションパラメータへの書き込みフラグを供給することができます可能性が書いていることを確認するために:

console.log('before unlink: '); 
fs.unlink('file.csv', function(err){ 

    // Ignore error if no file already exists 
    if (err && err.code !== 'ENOENT') 
     throw err; 

    var options = { flag : 'w' }; 
    fs.writeFile('file.csv', csvFile, options, function(err) { 
     if (err) throw err; 
     console.log('file saved'); 
    }); 
}); 

ところで、fs.unlink()が本当にfs.writeFile()上書きするので必要ありませんファイル。

+0

問題は、文字列変数csvFileをクリアしていなかったため、以前の要求からすべてのデータを保持していたことでした。私の質問を読んでいただきありがとうございます。 –

+0

ああ!ニースバグ:)それはうまくいって聞いてうれしい! – chriskelly

+0

はい非常にいい、LOL –

関連する問題