это нормально, чтобы иметь асинхронные функции обработки запроса? - PullRequest
0 голосов
/ 17 марта 2019

Большинство моих http-запросов выполняют асинхронные операции с базой данных, поэтому большинство из них выглядят так:

myRouter.post('/groups', (req, res, next) => {
  groupsController.createGroup(req, res).catch(next);
})

, а внутри контроллера я буду ждать ответа db, прежде чем ответить следующим образом:

 exports.createGroup = async function(req,res){
        var group = req.body.group;
        // retrieving the database object and performing the asyncrhonous action 
        group = await req.app.get('db').createGroup(group);
        res.status(201).json(group);
    }

Я использую cosmos db и, насколько я знаю, все операции асинхронные, правильно ли это делать?

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Ну, нет, если вы не хотите блокировать свой контроллер.

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

Лично (не уверен, что это практика - это шаблоны проектирования узлов / javascript, мне нравится разделять проблемы между обработчиком запросов и контроллером (data, service ...) - это значит, что обработчик извлечет данные из запроса, сделает вызов Контроллер и построить HTTP-ответ на основе результата. Я бы отправил HTTP-ответы обратно из контроллера

1 голос
/ 17 марта 2019

Да.Это правильный способ сделать что-то, когда вы создаете сервер.Все операции ввода-вывода, такие как обмен данными с базой данных / сетью / диском и т. Д., Должны быть асинхронными.

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