2017-05-07 8 views
1

複数のres.sendが1つのルートにありますが、それらをすべて1つに追加して最後に累積リストを送信するにはどうすればよいですか? は、私は次の形式でそれを行うことを好む:nodejs特急応答をリストに追加

{ 
"writer": {success message}, 
"archive": {success message}, 
... 
} 

とリストのエラーのため上記のような別のもの。ここ コードです:

router.post('/some/route', function (req, res) { 
    if (req.isLoggedIn()) { 
     return res.status(403).json({}); 
    } 
    MyModel.findById(req.user._id,function (err, data) { 
     if(err || data.rights !== 'super'){ 
      return res.status(403).json({}); 
     } 
     if(req.body.writer){ 
      Books.update(
       { writer : req.body.id}, 
       { $set : { writer : req.body.writer} }, 
       function (err) { 
        if(err){ 
         res.status(500).send(err); 
        } 
        else{ 
         res.status(200).send('updated successfully.'); 
        } 
       } 
      ); 
     }else{ 
      Books.remove({writer: req.body.id}, function(err){ 
       if (err){ return console.log(err)} 
      }); 
     } 

     MetaInfo.findOneAndRemove({_id: req.body.id}, function (err, data) { 
      console.log(err);    
     }); 
     Archive.findOne({_id: req.body.id},function (err, data) { 

      smtpTransporter.sendMail({...}, function (error, response) { 
       if (error) { 
        console.log(error); 
       } else { 
        console.log("Mail sent"); 
       } 
       smtpTransporter.close(); 
      }); 

      data.remove(); 
      if (err) { 
       console.log(err); 
       return res.status(200).json({ 
        success: false, 
        message: 'server error', 
        err: err 
       }); 
      } 
      res.status(200).json({ 
       success: true 
      }); 
     }) 
    }); 
}); 

答えて

2

私はあなたの問題を想定して、データベースへの非同期呼び出しです。

あなたが選んだライブラリ(例えばasync)を取って、あなたの非同期プロセスを実行し、コールバックで最後に結果を送ってください。あなたが.parallelを使用している場合は、約束の一つが失敗した場合、最終的なコールバックはすぐに呼び出されること

async.parallel([ 
 
    function(callback) { ... }, 
 
    function(callback) { ... } 
 
], function(err, results) { 
 
    // send your result here 
 
});

注:

あなたの結果は次のようになります。 docu

を参照してください。
関連する問題