【问题标题】:How to stop a file from beign overwritten with fs.writefile如何阻止文件被 fs.writefile 覆盖
【发布时间】:2021-07-11 11:54:54
【问题描述】:

问题是,当我尝试保存从使用 nodejs 中的 socket.io 创建的聊天室获取的数据时,一旦用户将消息提交到聊天室,该文件就会不断被覆盖。但是我希望将用户名 + 消息添加到文件中而不是覆盖它,因此用户名和消息都将作为对象存储到 JSON 文件中。

这是我一开始尝试的:

socket.on('send-chat-message', message => {
socket.broadcast.emit('chat-message',{ message: message, name: users[socket.id] })
var collect = {
  message: message,
  name: users[socket.id] 
 }
  var savechatData = JSON.stringify(collect)
  fs.writeFile('./public/static/chattingdata/chat.json', savechatData, function (error) {
  if (error) {
  console.log("There has been an error saving your configuration data")
  console.log(error.message)
  return
  }
  console.log('Configuration saved succesfully')
  })
})
})

但这只会覆盖它。于是我就这样尝试了:

socket.on('send-chat-message', message => {
socket.broadcast.emit('chat-message',{ message: message, name: users[socket.id] })
var collect = {
  message: message,
  name: users[socket.id] 
 }
  var savechatData = JSON.stringify(collect)
  fs.writeFile('./public/static/chattingdata/chat.json', {'flags': 'a'}, savechatData, function (error) {
  if (error) {
  console.log("There has been an error saving your configuration data")
  console.log(error.message)
  return
  }
  console.log('Configuration saved succesfully')
  })
})
})

然后我得到错误:'ERR_INVALID_OPT_VALUE_ENCODING'

那么我该如何解决这个问题呢?

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    fs.writeFile 函数的签名是fs.writeFile(file, data[, options], callback)。 data 参数应该作为第二个参数,可选的 options 参数作为第三个参数。 Refer Docs here

    更改您的代码

    fs.writeFile('./public/static/chattingdata/chat.json', {'flags': 'a'}, savechatData, function (error){ // Callback })
    

    fs.writeFile('./public/static/chattingdata/chat.json', savechatData, {'flags': 'a'}, function (error) { // callback })
    

    【讨论】:

    • 这可行,但它似乎仍然会覆盖文件。我发现人们说我必须使用标志 a+ 但这也会覆盖文件。我不想要,因为我想在文件中添加一个新行而不是覆盖它。
    • @SpringerJerry 检查solution。他们要求首先使用json.parse() 打开文件,然后将数据附加到文件中,最后再次保存文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多