Mongoose Model.findOneAndDelete промежуточное ПО, не связывающее уязвимый документ - PullRequest
0 голосов
/ 09 мая 2019

У меня есть модель User и другая модель Task.У пользователя есть много задач, и для каждой задачи есть свойство owner, которое заполняется идентификатором _id пользователя, создавшего эту задачу.

Я пытаюсь создать механизм каскадного удаления, такой, чтобыкогда пользователь удаляется, все его задачи также удаляются.

В моей схеме у меня есть следующее промежуточное ПО Mongoose:

    userSchema.pre('findOneAndDelete', async function beforeFindOneAndDelete(next) {
      const query = this;

      const {_id} = this.getQuery;
    
      await Task.deleteMany({
        owner: query.getQuery()._id,
      });
    
      next();
    });

Это промежуточное программное обеспечение Mongoose запускается этим маршрутом (в Express.js):

router.delete('/users/me', auth, async (req, res) => {
  try {
    await User.findOneAndDelete({
      _id: req.user._id,
    });

    return res.send(req.user);
  } catch (error) {
    return res.status(500).send();
  }
});

auth относится к промежуточному программному обеспечению Express.js, которое обеспечивает аутентификацию пользователя и заполняет req.user документом аутентифицированного пользователя.

Я понимаю, что Model.findOneAndDelete возвращает объект запроса, и это то, что связано с this в промежуточном программном обеспечении Mongoose - что не особенно полезно для меня, так как я бы предпочел, чтобы Документ пользователя был связан с this.

Мое решение извлечь _id из объекта запроса кажется довольно нечастым, и я чувствую, что что-то упустил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...