Можно ли выполнить какую-либо операцию с MongoDB после возврата Rest API - PullRequest
1 голос
/ 06 января 2020

Я хотел бы получить совет. В моем стеке nodeJS / Mon go одному из моих API отдыха требуется время для возврата, поскольку он выполняет цепочки операций перед возвратом результатов. Но для некоторых операций меня не беспокоит возвращение статуса того же. Поэтому мой вопрос: нормально ли, чтобы REST API возвращал результат до завершения всех операций, вместо этого подождите только основные операции.

Мой исходный код такой.

router.post('/updateStatus’, validateToken, function(req, res) {
    if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {

        statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {

        reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {
            var result = {status:200, data:out};
            res.json(result);

        } );


        } );
    } else {
            res.status(422);
            res.json({error:'Missing required params'});
     }

});

I хотел бы изменить как:

router.post('/updateStatus’, validateToken, function(req, res) {
    if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {

        statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {

            var result = {status:200, data:out};
            res.json(result);

        //***************Will continue in After returning API ********************
        reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {} );


        } );
    } else {
            res.status(422);
            res.json({error:'Missing required params'});
     }

});

т.е. я верну результат после statusCollection.updateStatus () и не дожидаюсь, пока reportCollection.updateReport (). Это нормально?

1 Ответ

0 голосов
/ 06 января 2020

Иногда вы можете выполнять тяжелые операции, в этом случае вы не всегда можете ждать, прежде чем вернуть результат клиенту.

По этой причине вам нужно подумать о том, что нужно клиенту. и что можно сделать в фоновом режиме, что не повлияет на клиента.

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

иногда, вы можете использовать websocket или вытягивание для обновления клиента, когда тяжелая операция выполнена, если клиенту нужен результат этой операции, чтобы быть актуальным.

это общая стратегия для разделения вычислений и не является для меня ошибкой.

...