【问题标题】:How can I combine these two API's? [closed]如何结合这两个 API? [关闭]
【发布时间】:2020-02-20 09:17:26
【问题描述】:

试图做到这一点,以便当用户删除他们的帐户时,它也会删除他们的所有帖子。最终我也会让它删除与他们相关的所有内容。

router.route('/')
    .delete((req, res) => {
      let currentUser = req.user.dataValues;
      return service.removeUser(currentUser.uuid).then(removed => {
        res.json(removed);
      })
    })

router.route('/removeAllProds')  
    .delete((req,res) => {
      let currentUser = req.user.dataValues;
      return service.removeAllUserProds(currentUser.uuid).then(removed => {
        res.json(removed);
      })
    })

这些是被拉取的函数

removeUser(userUuid) {
    return this.models.User.destroy({
      where: {
        uuid: userUuid
      }
    })
  }
removeAllUserProds(userUuid) {
    return this.models.Product.destroy({
      where: {
        sellerUuid: userUuid
      }
    })
  }

【问题讨论】:

    标签: node.js reactjs express


    【解决方案1】:

    因此,如果用户从数据库中删除,那么与该用户相关/相关的所有内容也将被删除。如果是,您需要更详细地说明您的问题,您使用的是什么数据库或 ORM。

    如果您使用 mongodb、mysql/postgresql,以下是一些示例:

    • Mongoose(mongodb) 你可以使用 pre 'remove' 中间件

    // create article schema
    const articleSchema = new mongoose.Schema({
      title: {
        type: String,
      },
      content: {
        type: String,
      },
      author: {
        type: Schema.Types.ObjectId,
        ref: 'User'
      }
    });
    
    // create user schema
    const userSchema = new mongoose.Schema({
      username: {
        type: String,
        unique: true,
      },
    });
    // the below middleware will remove all article related to this user/author
    userSchema.pre('remove', function(next) {
      this.model('Article').deleteMany({ author: this._id }, next);
    });

    你可以阅读所有关于pre hooks here的文档

    • 如果您使用带有 Sequelize 作为 ORM 的 SQL (MySql/PostgreSql):

      const User = sequelize.define('user', {
        username: {
          type: DataTypes.STRING,
        },
      });
      User.associate = models => {
        User.hasMany(models.Article, { onDelete: 'CASCADE' });
      };

    在关系数据库中,他们已经提供了一个名为ON DELETE CASCADE 的规则,这意味着如果您删除父记录,那么任何子记录也会被删除。 Here is a link 获取更多关于续集的详细示例。

    【讨论】:

    • 非常感谢您的回答,它让我走上了我需要的轨道。我们正在使用 psql 和 sequelize。我一直在使用邮递员来测试我的 api,它表明我的删除 api 工作正常,所以我不会意识到我错了。您链接的讨论没有发布,您可以发布链接吗?再次感谢!
    • 很高兴听到这个消息,我只是更新了相关文章的链接,并提供了很好的解释
    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多