2017-07-30 66 views
1

我正在構建一個Angular 4和Node應用程序。一旦任何用戶在前端註冊,我將其數據存儲在數據庫中,然後想要使用nodemailer軟件包向他們發送成功的註冊電子郵件。如何使用nodemailer爲NodeJS應用程序在後臺發送電子郵件?

這裏的節點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

使用Process.nextTick()用於發送電子郵件以外transporter.sendMail的塊

0

發送響應。所以它不會等待電子郵件發送過程完成。

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 
      }); 
相關問題