2015-11-12 30 views
12

Komut dosyasını çalıştırmak için node-crontab kullanıyorum. fs.writeFile, döngü ilk kez çalıştırıldığında üzerine yazılır, ancak bundan sonra veri eklenir. Yazmadan önce dosyayı silmeyi denedim ama aynısını yapıyor, ilk kez siler ama sonraki çalışmalarda ekleme yapmaya başlar. Ne yapmalıyım? fs.writeFile dosyasının üzerine yazma

Bu

senaryo: Ben kodunuzu çalıştırdığınızda ben hiçbir dosya ilk etapta varsa bir hata alıyorum Bir kere bazı ortam değişkenleri ...

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

      }); 
     }; 

    }); 
}; 

cevap

19

ommited. Aşağıya bakınız.

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'); 
    }); 
}); 

Btw, fs.unlink() gerçekten) (fs.writeFile beri gerekli değildir üzerine yazar:

açıkça şöyle seçenekleri parametreye yazma bayrağı sağlayabilmektedir olabilir size yazıyoruz Emin olmak için dosya.

+0

Sorun şu ki, csvFile dize değişkeni temizlemiyordum ve tüm verileri önceki isteklerden tutuyordum. Sorumu okumak için zaman ayırdığınız için teşekkür ederim. –

+0

Ah! Güzel hata :) İşe yaradığını duyduğuma sevindim! – chriskelly

+0

Evet çok güzel, LOL –

İlgili konular