我正在使用带有socket.io的Node.js。我希望客户端在服务器端编写文件,就像某个客户端添加注释一样。
我在服务器端的代码
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]))
})
我知道我的代码搞砸了,但是你能给我一个简单的例子来添加一个包含对象的数组并从文件中读取它。
为了便于阅读,我稍微重构了一下你的代码。
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
来获取数组。