Несколько запросов к одной и той же конечной точке маршрута в узле экспресс

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

Ниже показано, что я пробовал:

function upvotePost(req,res,next){
        /*query 1*/
        r.table('posts').filter(function(post){
          return post('id').eq(someId);
        }).update(
            {"upvotes": r.row("upvotes").add(1)}).run(req._rdbConn)
        /*query 2*/
        .then(function(){
            r.table('users').filter(r.row('login').eq(someUser))
            .update({upvotelist: r.row('upvotelist').changeAt(someId,1)})
            .run(req._rdbConn).then(function(result){
                res.send(JSON.stringify(result));
            })
        }).error(handleError(res))
         .finally(next);
    }

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


person João Lima    schedule 07.11.2015    source источник


Ответы (1)


Я заставил это работать, используя async.parallel

function upvotePost(req,res,next){
    async.parallel([
      /*query 1*/
      function(){
        r.table('posts').filter(function(post){
          console.log(req.url);
          return post('pid').eq(parseInt(req.params.id));
        }).update({"upvotes": r.row("upvotes").add(1)}).run(req._rdbConn).then(function(result){
            res.send(JSON.stringify(result));
        })
      },
      /*query 2*/
      function(){
        r.table('users').filter(r.row('login').eq(req.decoded.login))
        .update({upvotelist: r.row('upvotelist').changeAt(parseInt(req.params.id),1)})
        .run(req._rdbConn)
      }
      ], null);
}

(отсутствует обработка ошибок)

person João Lima    schedule 07.11.2015