Как правильно использовать Nodemailer в expressjs?

Я пытаюсь использовать nodemailer в expressjs приложение. Должен ли я продолжать создавать транспортный объект из обработчика маршрута или создавать транспортный объект внутри обработчика маршрута просто отлично?

var express = require('express')
  , app = express()
  , nodemailer = require('nodemailer');

  smtpTrans = nodemailer.createTransport('SMTP', {
      service: 'Gmail',
      auth: {
          user: "me@gmail.com",
          pass: "application-specific-password" 
      }
  });
  app.post('/register', function(req, res){
    smtpTrans.sendMail(mailOptions);
  });

или

var express = require('express')
  , app = express()
  , nodemailer = require('nodemailer');

  app.post('/register', function(req, res){
    smtpTrans = nodemailer.createTransport('SMTP', {
      service: 'Gmail',
      auth: {
          user: "me@gmail.com",
          pass: "application-specific-password" 
      }
    });
    smtpTrans.sendMail(mailOptions);
  });

1 ответов


вы должны думать о вашем случае использовать, чтобы сделать выбор.

транспорт SMTP в nodemailer создает пул соединений, который необходимо явно закрыть. Это хорошо, потому что соединение всегда остается открытым: вы страдаете только задержками соединения(включая согласование TLS и т. д.) при запуске приложения.

ваше первое решение хорошо, если вы отправляете много сообщений: сохраняя соединение открытым, вы минимизируете задержку и использование ресурсов с помощью пул соединений.

С другой стороны, ваше второе решение хорошо, если вы отправляете несколько сообщений: нет необходимости поддерживать соединение, если вы отправляете одно письмо в час. Будьте осторожны, так как ваш текущий код немного неправильный: вам нужно явно закрыть пул соединений. Если вы этого не сделаете, пул соединений останется открытым, даже если вы потеряете ссылку на объект.

smtpTrans = nodemailer.createTransport('SMTP', { … });
smtpTrans.sendMail(mailOptions, function (err, responseStatus) {
  smtpTrans.close(); // Don't forget to close the connection pool!
});

С этот вопрос кажется, что все ошибки в the