首页 > 解决方案 > 为什么喜欢在 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);
          }
        }

      }

heresocket 和 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)
                  }
                }    
              })
             
          });
        }
      })

    })

标签: node.jsvue.jsexpressmongoose

解决方案


推荐阅读