Node.js, использующий res и req в Сервисах - PullRequest
0 голосов
/ 02 июля 2018

У меня есть общий вопрос о том, как вы обрабатываете сервисы и маршруты в node.js. Вы бы обработали ответ непосредственно в сервисе или оставили бы его на маршруте? Вот что я имею в виду в коде

Как это

Маршрут

router.get('/', (req, res, next) ==> {
   someService.someMethod(req, res);
});

Услуги

const someMethod = (req, res) => {
   try {
      var something = await someOtherMethod(req.body.someParameter);
      return res.status(200).send(something.data);
   } catch (err) {
      return res.status(500).send({msg: err.message});
   }
}

Или это

Маршрутизатор

router.get('/', (req, res, next) ==> {
   try {
      var something = await someService.someMethod(req.body.someParameter);
      res.status(200).send(something.data);
   } catch (err) {
      res.status(500).send({msg: err.message})
   }
});

Услуги

const SomeMethod = (Input) => {
   return someOtherMethod(Input);
}

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

Как вы разрабатываете свои услуги?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Я использую следующую архитектуру: 1. Маршрут 2. Контроллер 3. Услуги

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

0 голосов
/ 02 июля 2018

Я бы пошел на router.get('/', RootController)

const RootController = (req, res) => {
    // extract what you need from the request
    const param = req.body.param;

    // calculate what you need in a pure function `businessLogic`
    const result = businessLogic(param);

    // send the response
    return res.send(result);
}

Таким образом, вы получаете разделение проблем - ваш корневой контроллер отвечает только за обработку / запросов - получение ответа на запрос. Вся «бизнес-логика» выполняется в виде чистой функции (вы можете легко протестировать ее без контекста / мошенничества HTTP-запроса, ее можно повторно использовать где-то еще, например, в другом контроллере).

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