第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

sequelize findAll 不檢查當(dāng)前用戶是否喜歡帖子

sequelize findAll 不檢查當(dāng)前用戶是否喜歡帖子

我有一個(gè)場景,如果你喜歡一個(gè)帖子,它會(huì)改變liked:false 到 liked:true這個(gè)喜歡是基于當(dāng)前用戶是否喜歡該帖子。問題是當(dāng)新用戶注冊時(shí),liked盡管新用戶不喜歡該帖子,它仍然會(huì)顯示為真。我如何能夠檢查當(dāng)前用戶是否喜歡該帖子?就檢查當(dāng)前用戶是否喜歡該帖子而言,我認(rèn)為我的邏輯有點(diǎn)不對。我想保留findAll功能,我應(yīng)該獲得所有帖子,而不僅僅是當(dāng)前用戶。有點(diǎn)像 instagram 或 facebook。這是帖子數(shù)組這就是我喜歡帖子的方式喜歡帖子likePost: async (req: any, res: Response) => {    const created = await models.Likes.findOne({      where: {        userId: req.session.user.id,        resourceId: req.params.id      }    });    console.log(created);    const post = await models.Post.findOne({ where: { id: req.params.id } });    // if like not created then do this    if (!created && post) {      await models.Likes.create({        userId: req.session.user.id,        resourceId: req.params.id      }).then(() => {        post.increment("likeCounts", { by: 1 });        post.update({ liked: req.session.user.id ? true : false });        res.status(200).send({          message: "You liked this post"        });      });      // else if post does not exist    } else if (!post) {      res.status(200).send({        message: "there is not post to be liked"      });    } else {      // else if a like does exist destroy like      await models.Likes.destroy({        where: {          userId: req.session.user.id        }      }).then(() => {        post.decrement("likeCounts", { by: 1 });        res.status(200).send({          message: "You unliked this post"        });      });    }這就是我獲取帖子的方式。
查看完整描述

2 回答

?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

因此,通過遵循 @doublesharp 幫助,我能夠通過使用續(xù)集數(shù)據(jù)類型VIRTUAL以及使用getDataValue來確定當(dāng)前用戶是否喜歡該帖子


更新代碼


崗位(模型)


"use strict";

module.exports = (sequelize, DataTypes) => {

    var Post = sequelize.define("Post", {

        title: DataTypes.STRING,

        postContent: DataTypes.STRING,

        liked: {

            type: DataTypes.VIRTUAL,

            allowNull: false,

            defaultValue: false,

            get: function () {

                return this.getDataValue('Likes').length ? true : false;

            }

        },

        likeCounts: {

            type: DataTypes.INTEGER,

            allowNull: false,

            defaultValue: 0,

            validate: {

                min: 0,

            }

        },

        authorId: DataTypes.INTEGER

    }, {});

    Post.associate = function (models) {

        Post.belongsTo(models.User, {

            as: "author",

            foreignKey: "authorId",

            onDelete: "CASCADE"

        });

        Post.hasMany(models.Likes, {

            foreignKey: "resourceId",

            timestamps: false,

            targetKey: "id",

            onDelete: "CASCADE"

        });

    };

    return Post;

};

//# sourceMappingURL=post.js.map


查看完整回答
反對 回復(fù) 2021-12-12
?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

我相信您看到的錯(cuò)誤是因?yàn)槟鷽]有解決由以下人員返回的承諾:


    post.increment("likeCounts", { by: 1 });

    post.update({ liked: req.session.user.id ? true : false });

這意味著將在這些查詢執(zhí)行之前發(fā)送響應(yīng)。該post.liked值將user.id在會(huì)話中的任何時(shí)候設(shè)置為 true 。如果稍后的查詢失敗,您可能需要考慮使用事務(wù)來回滾一些較早的查詢。我還建議使用Promise.all()進(jìn)行并發(fā)查詢(它會(huì)更快)并且只使用async/await不混入thenables.


likePost: async (req: any, res: Response) => {

  // fetch created and post at the same time

  const [ created, post ] = await Promise.all([

    models.Likes.findOne({

      where: {

        userId: req.session.user.id,

        resourceId: req.params.id

      }

    }),

    models.Post.findOne({

      where: {   

        id: req.params.id

      }

    }),

  ]);


  // no post, no updates

  if (!post) {

    return res.status(200).send({

      message: "there is no post to be liked"

    });

  }


  // we are going to make updates, so use a transaction, you will need to reference sequelize

  let transaction;

  try {

    transaction = await sequelize.transaction();


    if (!created && post) {

      // use Promise.all() for concurrency

      await Promise.all([

        models.Likes.create({

          userId: req.session.user.id,

          resourceId: req.params.id

        }, { transaction }),

        post.increment("likeCounts", { by: 1, transaction }),

        post.update({ liked: req.session.user.id ? true : false }, { transaction }),

      ]);


      await transaction.commit();


      return res.status(200).send({

        message: "You liked this post"

      });

    }


    await Promise.all([

      models.Likes.destroy({

        where: {

          userId: req.session.user.id

        }

      }, { transaction }),

      post.decrement("likeCounts", { by: 1, transaction }),

    ]);


    await transaction.commit();


    return res.status(200).send({

      message: "You unliked this post"

    });

  } catch (err) {

    if (transaction) {

      await transaction.rollback();

    }

    console.log('There was an error', err);

    return res.status(500);

  }

}

僅Likes在 getPost() 上返回當(dāng)前用戶


getPosts: async (req: any, res: Response) => {

  const posts = await models.Post.findAll({

    include: [

      { model: models.User, as: "author", attributes: ["username"] },

      // limit the likes based on the logged in user

      { model: models.Likes, required: false,

        where: { userId: req.session.user.id },

      },

    ],

    order: [["createdAt", "DESC"]],

    limit: 6

  });


  return res.json(posts);

},


查看完整回答
反對 回復(fù) 2021-12-12
  • 2 回答
  • 0 關(guān)注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)