Node.js将数据写入文件会导致其他书面字符

时间:2019-01-15 20:41:52

标签: javascript node.js fs

标题中的

,当我尝试使用文件系统函数fs.writeFile()将数据保存到文件时,有时文件上有多余的数据。 我的代码: fs.writeFile('path',JSON.stringify(data),function(err){});

可能是因为JSON.stringify()或fs.writeFile的问题。

如果您需要其他信息,我愿意提供!

更多代码:

function CheckLeaderBoards(player, tag, points) {
    fs.readFile(datapath + '/data/topplayers.json', function(err, data) {
        var lb = JSON.parse(data);
        var isin = false;
        for (let i = 0; i < lb.length; i++) {
            if (lb[i].tag == tag) {
                isin = true;
                lb[i].points = points;
                break;
            }
        }
        if (!isin)
            lb.push({"player": player.toString(), "tag": tag.toString(), "points": parseInt(points)});
        for (let i = 0; i < lb.length; i++) {
            var bestpoints = -100;
            var bestindex = 0;
            for (let j = i; j < lb.length; j++) {
                if (lb[j].points > bestpoints) {
                    bestpoints = lb[j].points;
                    bestindex = j;
                }
            }
            lb = ChangeArrayIndex(lb, bestindex, i);
        }
        fs.writeFile(datapath + '/data/topplayers.json', JSON.stringify(lb), function (err) {});
    })
}

function ChangeArrayIndex(array, fromIndex, toIndex) {
    var arr = [];
    for (let i = 0; i < array.length; i++) {
        if (i == toIndex) arr.push(array[fromIndex]);
        if (i == fromIndex) continue;
        arr.push(array[i]);
    }
    return arr;
}

基本上我想写一个排行榜,我有一个JSON对象数组,例如:{“ player”:“ Bob”,“ tag”:“ a10b”,“ points”:10},...

2 个答案:

答案 0 :(得分:4)

要写入文件,请打开文件,在回调中,您将获得文件描述符,该描述符将用于写入文件。请参见示例:

  fs.open(datapath + '/data/topplayers.json', 'wx', function(error, fileDescriptor){        
    if(!error && fileDescriptor){        
        var stringData = JSON.stringify(data);        
        fs.writeFile(fileDescriptor, stringData, function(error){        
            if(!error){        
                fs.close(fileDescriptor, function(error){        
                    if(!error){        
                        callback(false);        
                    }else{        
                        callback('Error in close file');        
                    }        
                });        
            }else{        
                callback('Error in writing file.');        
            }        
        });        
    }        
}        

答案 1 :(得分:-1)

好,如果要更新文件,请检查以下代码:

const myUpdaterFcn = (dir,file,data,callback)=>{
           //dir looks like this: '/your/existing/path/file.json'

  // Open the file for writing (using the keyword r+)
  fs.open(dir, 'r+', (err, fileDescriptor)=>{
    if(!err && fileDescriptor){
      // Convert data to string
      const stringData = JSON.stringify(data)

      // Truncate the file
      fs.truncate(fileDescriptor,err=>{
        if(!err){
          // Write to file and close it
          fs.writeFile(fileDescriptor, stringData,err=>{
            if(!err){
              fs.close(fileDescriptor,err=>{
                if(!err){
                  callback(false)
                } else {
                  callback('Error closing existing file')
                }
              })
            } else {
              callback('Error writing to existing file')
            }
          })
        } else {
          callback('Error truncating file')
        }
      })
    } else {
      callback('Could not open file for updating, it may not exist yet')
    }
  })

}

祝你好运。