fs.writeFile不覆盖文件

我正在使用node-crontab来运行脚​​本。 fs.writeFile覆盖第一次循环运行,但之后是追加数据。 我已经尝试在写入之前删除文件,但是正在做同样的事情,第一次删除它,但在随后的运行中开始追加。 我该怎么办?

这是脚本:我ommited一些环境variables…

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://credentials@api.comettracker.com/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'); }); }; }); }; 

       

网上收集的解决方案 "fs.writeFile不覆盖文件"

首先,当我运行你的代码时,如果没有文件存在,我会得到一个错误。 看到下面的修复。

为了确保你正在编写你可以明确地提供写标志的选项参数,如下所示:

 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()覆盖文件。