我正在将Node.js与socket.io一起使用。我希望客户端像在某些客户端添加注释时那样,在服务器端写入文件。
我在服务器端的代码
var readcomments=fs.readFile(path.join(__dirname,'comments.txt'),(e,comment)=> {
if(e) {
socket.emit('readcomments',e);
} else
comment=JSON.stringify(comment);
socket.emit('readcomments',comment);
console.log(comment);
socket.on('writeComment',(text)=> {
fs.appendFile(path.join(__dirname,'comments.txt'),
comment,(e)=> {
})
})
})
客户端
socket.on('readcomments',(comments)=> {
comments.map((name)=> {
newarray= array.concat(name.data)
})
socket.emit('writeComment',newarray.concat([some object]))
})
我知道我的代码搞砸了,但是可以给我一个简单的例子,添加一个包含对象的数组,然后从文件中读取它。
答案 0 :(得分:0)
为了您的可重用性,我对代码进行了一些重构。
const filePath = path.join(__dirname,'comments.txt');
const onCommentsRead = (e, value) => {
if(e) {
socket.emit('readcomments', e);
} else {
const commentsArray = value.toString().split("\n");
const comments = JSON.stringify(commentsArray);
socket.emit('readcomments', comments);
console.log(comments);
socket.on('writeComment', (text) => onCommenntWrite(text, comments));
}
}
const onCommenntWrite = (text, comments) => {
fs.appendFile(filePath, comments);
};
const readcomments= fs.readFile(filePath, onCommentsRead);
我在这段代码中没有看到任何问题,如果有一个或已读取的内容,它将发送错误。
请注意,如果要发送数组,则需要通过\n
拆分来获取数组。