【发布时间】:2020-07-11 02:33:05
【问题描述】:
我有一个供稿,用户可以在其中对帖子进行投票
服务器> node,express,socket.io v2.3.0
服务器 > app.js
client.on('connection', socket =>{
socket.emit('success', {message: 'Server Accecpting Connections'});
// CLients connected
client.clients((error, clients) => {
if (error) throw error;
console.log(`<----- users connected ->`)
console.log(clients);
console.log(' ');
})
// Disconnected user
socket.on('disconnect',() =>{
console.log(`user disconnected ---> ${socket.id}`);
console.log(' ');
})
})
服务器 > votePost.js
const votePost = function(client){
client.on('connection', socket =>{
socket.on('votePost',async post =>{
try {
// logic
socket.emit('postVoted', {updatedPost})
}
} catch (error) {
console.log(error);
}
module.exports = votePost
客户端 > vue CLI,vuex,socket.io v2.3.0,vue-socket.io v3.0.7
客户端> main.js“配置:”
import VueSocketIO from 'vue-socket.io'
import SocketIO from "socket.io-client"
Vue.use(new VueSocketIO({
debug: true,
connection: SocketIO('http://localhost:3000'), //options object is Optional
vuex: {
store,
actionPrefix: "SOCKET_",
mutationPrefix: "SOCKET_"
}
})
);
在 post 动作中的 vuex 模块上测试与服务器的连接 从服务器接收成功消息(所有连接的套接字都看到此消息)
"SOCKET_success"(state, server) {
console.log(server.message);
},
在方法内部从组件向服务器发送数据:
createVote(data){
const post = {SOMEPOSTDATA}
this.$socket.emit('votePost', post)
},
接收从服务器创建的数据:vuex post 模块(动作内部)
"SOCKET_updatedPost"({commit,state}, server) {
state.post = server.updatedPost
},
此时,我从服务器接收更新的帖子并更新我看到更新的状态。 但是我也需要每次使用都看到更新后的帖子
为什么会这样?我缺少什么?,所有用户都应该在有人更新时看到更改
【问题讨论】:
标签: node.js express vue.js socket.io vuex