问题是,当我试图保存从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">
那么我该如何解决这个问题呢?
fs.writeFile
函数的签名是fs.writeFile(file, data[, options], callback)
。数据参数应作为第二个参数给出,可选选项参数应为第三个参数。请参阅此处的文档
从更改您的代码
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 })