2017-07-30 7 views
1

私はAngular 4 and Nodeアプリケーションを構築しています。ユーザーがフロントエンドに登録すると、そのデータをデータベースに保存してから、nodemailerパッケージを使用して登録成功のメールを送信します。NodeJSアプリケーションにnodemailerを使用してバックグラウンドで電子メールを送信するにはどうすればいいですか?

ここノードjsのコードです:

router.post('/', function(req, res, next) { 
     SOME_DATABASE_FUNC() { 
      if(FAILED_CASE) { 
       return res.status(500).json({ 
        title: 'An error occurred', 
        status: 500, 
        error: error 
      }); 

      var mailOptions {...} 

      transporter.sendMail(mailOptions, function (error, info) { 
       if (error) { 
       console.log(error); 
       return res.status(500).json({ 
       title: 'An error occurred', 
       status: 500, 
       error: error 
       }); 
       } 
       console.log('Message', info.messageId, info.response); 
       return res.status(200).json({ 
       message: 'Emailed successfully', 
       details: info 
       }); 
      }); 
     } 
     } 
    }); 

このコードは完璧に動作しますが、それは電子メールを送信するために数秒かかり、そしてユーザーがいないようです成功応答を表示するために待たなければならないが、良いものに合うように。代わりに私は非同期関数やcronジョブのようにバックグラウンドで送信したいと思います。

しかし、私が代わりに送信すると、データベースのトランザクションの後に待っているのジョブとしてそれを送信するためのコードを変換する方法がわからないです。問題で私を助けてください。

答えて

0

はtransporter.sendMailのブロック外応答を送信メール

0

を送信するProcess.nextTick()を使用します。したがって、電子メールの送信が完了するまで待つことはありません。

transporter.sendMail(mailOptions, function (error, info) { 
      if (error) { 
      console.log(error); 
      return res.status(500).json({ 
      title: 'An error occurred', 
      status: 500, 
      error: error 
      }); 
      } 
      console.log('Message', info.messageId, info.response); 
     }); 
      return res.status(200).json({ 
      message: 'Emailed successfully', 
      details: info 
      }); 
関連する問題