使用(socket.io)在Node.js中读写对象数组

时间:2018-09-07 08:57:07

标签: javascript node.js reactjs socket.io

我正在将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]))
})

我知道我的代码搞砸了,但是可以给我一个简单的例子,添加一个包含对象的数组,然后从文件中读取它。

1 个答案:

答案 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拆分来获取数组。