Как использовать блок кода узла js для второго случая?

1

Прежде всего, позвольте мне быть более конкретным. У меня есть настройка кода nodemailer для страницы "Контакты" на моем веб-сайте, и она работает нормально. Тем не менее, у меня есть другая страница "Службы", в которой у меня есть другая форма, и я хочу использовать этот предыдущий код установки для этой страницы, поэтому я могу отправить представленную информацию в виде электронной почты. Я попытался сделать еще один файл и вставить тот же код, но назвал переменные такими app2, transporter2 и так далее. Но это не сработает. Я новичок в разработке nodejs, поэтому мне нужна помощь. Каков наилучший способ достичь этого?

Кстати; Контакты, страницы служб и файлы app.js(nodejs code) находятся в корневой папке.

Узел js:

const express = require('express');
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const path = require('path');
const nodemailer = require('nodemailer');

const app = express();

// View engine setup
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');

// Static folder
app.use('/public', express.static(path.join(__dirname, 'public')));
app.use('/', express.static(path.join(__dirname, '')));

// Body Parser Middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.get('/', (req, res) => {
  res.render('contact');
});

app.post('/send', (req, res) => {
  const output = '
    <ul>  
      <li>Name: ${req.body.name}</li>
      <li>Email: ${req.body.email}</li>
      <li>Phone: ${req.body.phone}</li>
    </ul>
  ';

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    service: 'gmail',
    port: 25,
    secure: false, // true for 465, false for other ports
    auth: {
        user: 'email', // senders email
        pass: 'password' // senders password
    },
    tls:{
      rejectUnauthorized:false
    }
  });

  // setup email data with raw html
  let mailOptions = {
      from: '"xyz" <[email protected]>', // sender address
      to: req.body.email, // receiver or receivers
      subject: 'xyz', // Subject line
      html: output // html body
  };

  // send mail with defined transport object
  transporter.sendMail(mailOptions, (error, info) => {
      if (error) {
          return console.log(error);
      }
      console.log('Message sent: %s', info.messageId);   
      console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));

      res.render('contact', {msg:'Your contact message has successfully sent to us.'});
  });
  });

app.listen(3000, () => console.log('Server started...'));
  • 0
    Я не понимаю твою проблему. Вы обслуживаете 2 страницы, которые должны отправлять электронные письма, и вам удается отправлять электронные письма только с 1 страницы?
  • 0
    Я уже могу отправить письмо на одну страницу и настроить код для него. Но я хотел использовать этот код, чтобы иметь возможность отправлять электронные письма на другой странице, так что это то, что я пытаюсь решить @RaphaMex
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Почему вы создаете модуль. https://nodejs.org/api/modules.html

//yourModule.js
const sendMail = (email, output) => new Promise((resolve, reject) => {
  //your code to send mail.
  //resolve the promise
})

module.exports { sendMail }

Затем вы включаете его везде, где вам нужно:

const emailModule = require('myModuleName');

emailModule.sendMail('[email protected]', output).then(() => {
  //whatever
}).catch(catchErrFn)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню