gpt4 book ai didi

javascript - 如何使用 expressjs、reactjs 持久化数据?

转载 作者:搜寻专家 更新时间:2023-11-01 00:35:40 24 4
gpt4 key购买 nike

我创建了一个简单的聊天应用程序。我想保留数据,所以每当我刷新它时,它也应该显示以前的聊天记录。目前,我正在使用 socket.io、reactjs 和 nodejs/express。当我刷新页面时,所有聊天都消失了,为什么?我认为我的后端在下面的代码中不起作用。目前,只有客户端在工作而不是后端,为什么这样呢? server.js 有什么问题?

代码:

服务器.js:

const express = require('express');
const socket = require('socket.io');

const app = express();

server = app.listen(5000, function(){
console.log('server is running on port 5000')
});

io = socket(server);

io.on('connection', (socket) => {
console.log(socket.id);

socket.on('SEND_MESSAGE', function(data){
io.emit('RECEIVE_MESSAGE', data);
})

});

聊天.js:

import React, { Component } from 'react'
import './chat.css'
import Icon, {
Ionicons,
} from 'react-web-vector-icons'
import io from "socket.io-client";

export default class Chat extends Component {

constructor(props){
super(props);

this.state = {
message: '',
messages: []
};

this.socket = io('localhost:5000');

this.socket.on('RECEIVE_MESSAGE', function(data){
addMessage(data);
});

const addMessage = data => {
console.log(data);
this.setState({messages: [...this.state.messages, data]});
console.log(this.state.messages);
};

this.sendMessage = ev => {
ev.preventDefault();
this.socket.emit('SEND_MESSAGE', {
message: this.state.message
})
this.setState({message: ''});
}

}

render() {
return (
<div>
<div id="status"></div>
<div id="chat">
<div className="card">
<div id="messages" className="card-block">
{this.state.messages.map(message => {
return (
<div className="msgCard">{message.message}</div>
)
})}
</div>
</div>
<div className="row">
<div className="column">
<input id="inputmsg" type="text" placeholder="Enter Message...."
value={this.state.message} onChange={ev => this.setState({message: ev.target.value})}/>
</div>
<div className="column2">
<button id="send" className="button" onClick={this.sendMessage}>Send</button>
</div>
</div>
</div>
</div>
)
}
}

注意:后端在端口 5000 上工作,客户端在 3000 上同时使用。当我转到端口 5000 时,我收到错误 404,这是为什么?

截图:

enter image description here

聊天应用:

enter image description here

最佳答案

您必须将数据保存在某处。是的,没有数据库是可能的。在这里,我使用驻留在浏览器中的 LocalStorage 实现了它。

this.state = {
// Get previously saved messages.
message: '',
messages: JSON.parse(LocalStorage.getItem('messages')) || [],
};


const addMessage = data => {
console.log(data);
this.setState({messages: [...this.state.messages, data]});
console.log(this.state.messages);
// Saving to HTML5 LocalStorage
LocalStorage.setItem('messages' , JSON.stringify(this.state.messages);
};

希望对你有所帮助。如果您遇到任何问题,请发表评论。

关于javascript - 如何使用 expressjs、reactjs 持久化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com