node.js - 为什么喜欢在 UserProfile.vue 中不会实时改变
问题描述
post.vue 代码使用 socket ......
this.socket.on('add-like', like => {
this.$store.commit('addLike', like)
})
this.socket.on('remove-like', like => {
this.$store.commit('removeLike', like)
})
Posts.vue 代码组件…………
<my-post
:image="'http://localhost:3000/static/' + post._id + '.PNG'"
:name="post.text"
:id="post._id"
:commentsArr="post.comments"
:likeNumber="post.likes.length"
:likesArr="post.likes"
>
</my-post>
USerProfile.vue 代码组件............
<my-post
:image="'http://localhost:3000/static/' + post._id + '.PNG'"
:name="post.text"
:id="post._id"
:commentsArr="post.comments"
:likeNumber="post.likes.length"
:likesArr="post.likes"
>
</my-post>
vuex.js 代码 addLike 突变............
addLike: (state, like) => {
let posts = state.posts;
for (let i = 0; i < posts.length; i++) {
if (posts[i]._id == like.post) {
if (posts[i].likes.findIndex((el) => el._id === like._id) === -1) {
posts[i].likes.push(like);
}
}
}
vuex.js 代码 addLike 突变............
addLike: (state, like) => {
let posts = state.posts;
for (let i = 0; i < posts.length; i++) {
if (posts[i]._id == like.post) {
if (posts[i].likes.findIndex((el) => el._id === like._id) === -1) {
posts[i].likes.push(like);
}
}
}
vuex.js 代码 addLike 突变............
addLike: (state, like) => {
let posts = state.posts;
for (let i = 0; i < posts.length; i++) {
if (posts[i]._id == like.post) {
if (posts[i].likes.findIndex((el) => el._id === like._id) === -1) {
posts[i].likes.push(like);
}
}
}
here
socket 和 mongoose 和 express ...................................... ......
socket.on('add-remove-like', (postId) => {
db.likeSchema.findOne({$and: [{post: postId.postID ,user: socket._id}]})
.exec((err, result) => {
if (err) {
throw err
} if (result !== null) { // pull like
db.likeSchema.findOne({ $and: [{ post: postId.postID }, { user: socket._id }] }).exec((err, like1) => {
db.likeSchema.findOneAndRemove({ $and: [{ post: postId.postID }, { user: socket._id }] }).exec((err, rs) => {
db.postSchema.findOneAndUpdate({ _id: postId.postID },
{ $pull: { likes: mongoose.Types.ObjectId(like1._id.toString())
} })
.populate('owner')
.exec((err, post) => {
console.log('0000 ', like1)
let friendList = post.owner.friends
for (let conn of array_of_connection) {
if (friendList.indexOf(conn._id) !== -1) {
io.to(conn.id).emit("remove-like", like1)
}
}
})
})
})
} if (result == null) {
const newLike = new db.likeSchema();
newLike.post = postId.postID;
newLike.user = socket._id
newLike.save((err, like) => {
db.postSchema
.findOneAndUpdate({ _id: postId.postID }, { $push: { likes: like._id } })
.populate('owner')
.exec((err, post) => {
let friendList = post.owner.friends
for (let conn of array_of_connection) {
if (friendList.indexOf(conn._id) !== -1) {
io.to(conn.id).emit("add-like", like)
}
}
})
});
}
})
})
解决方案
推荐阅读
- r - 是否可以在 Shiny 中提供一个带有换行符的列表作为输入?
- html - 使用 BreadcrumbList 获取 SEO 错误
- python - 使用经过训练的 MNB 分类器预测值
- database - 在 MongoDB 中,如何使用 $lookup 仅获取不匹配的记录?
- .net - TSql130Parser 似乎无法识别提示
- ruby - 使用#include 比较对象与自身时未使用自定义 == 运算符?
- c# - 如何获取按标题编号排序的对象列表?
- azure - 如何将表中的信息从 azure 提取到 adroid studio 中的列表视图?
- css - Angular CDK拖放 - 如何保持原始位置?
- c# - 使用 MVC 上传文件时,如何在 Azure App Service 中扫描病毒,而不是使用第三方 API 和 C#?