Как настроить таргетинг на другой контроллер из nodejs? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть способ оплаты в моем приложении nodejs, с другой стороны, у меня есть маршрут для удаления пользователя, который также должен удалить его из моего платежного шлюза. Итак, у меня теперь два маршрута: (DELETE / user /: id) и (DELETE / payment / user /: id), последний - удалить подписку пользователя из моего платежного шлюза.

Вопрос: возможно ли это с узла для вызова контроллера, который управляет удалением подписки, зная, что он принимает только объект запроса (express)?

/*
* Remove subscription
* File ./controllers/payement/subscription.ts
*/
const unsubscribe = (req:express.Request, res:express.Response) {
   // ... code to unsubscribe user
}
/*
* Remove user 
* File ./controllers/user.js
*/
const removeUser = (req:express.Request, res:express.Response) {
    // HERE I WANT TO CALL THE CONTROLLER ABOVE
}

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 мая 2020

Допустим, у вас есть эта User модель:

const User = Model({
   name: String,
   email: String,
   isDeleted: false
})

и Subscription модель:

const Subscription = Model({
   userId: 'User',  // references User model above
   amount: Number
})

Теперь, когда вы удаляете пользователя и, следовательно, соответствующую запись подписки, это Вот как вы бы поступили в модели User:

Route.delete('/user/:id', function(req, res) => {

   let user = null; // for record keeping
   let subscription = null;

   Transaction.start(async () => {
     user = await User.findByIdAndDelete(req.params.id);
     subscription = await Subscription.findAndDelete({ userId: user.id });
   });

   Transaction.error(() => {
      // resotre user & subscription
   })

})

Таким образом, вам не нужно вызывать контроллер из другого контроллера и бизнес-логи c также находится в моделях.

Примечание : Transaction - это фиктивная библиотека.

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