Контактная форма не работает после производства на Heroku или Сейчас - PullRequest
0 голосов
/ 28 апреля 2020

я строю контактную форму в следующем js. Он отлично работает, но только на локальном хосте, после того как рабочий клиент отправляет сообщение на сервер, в противном случае сервер не отправляет письмо получателю.

Конечно, я жестко закодировал конечную точку для своего домена в контактной форме

axios({
  method: "post",
  url: "https://my-domain/api/order",
  headers: { "content-type": "application/json",
   },

и оставил бы тот же код на стороне сервера

const express = require("express");
const next = require("next");
const fetch = require("node-fetch");
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const bodyParser = require("body-parser");
const handle = app.getRequestHandler();
const server = express();
const cors = require("cors");
const fileUpload = require('express-fileupload');
const smtpTransport = require('nodemailer-smtp-transport');
const path = require('path');
const nodemailer = require('nodemailer');
const inlineBase64 = require('nodemailer-plugin-inline-base64');

const PORT = process.env.PORT || 3000;
server.use(cors({ origin: PORT }));
server.use('/public', express.static(path.join(__dirname, 'public')))

 app
  .prepare()
  .then(() => {
    server.listen(PORT || 3000, err => {
  if (err) throw err;
  console.log(`> Ready on http://localhost:${PORT}`);
    });
  })
   .catch(ex => {
    console.error(ex.stack);
    process.exit(1);
  });
   server.use(bodyParser.json({limit: '50mb', extended: true}));
   server.use(bodyParser.urlencoded({ limit: '50mb', extended: true}));
   server.use(function(request, response, next) {
              response.header("Access-Control-Allow-Origin", "*");
              response.header(
                              "Access-Control-Allow-Headers",
                              "Origin, X-Requested-With, Content-Type, Accept"
                               );
              next();
   });
     server.post("/api/order", async (request, response) => {
      try {
          const transporter = await nodemailer.createTransport(smtpTransport({
          host: ' smtp.provider.eu',
          port: 465,
          secure: true,
          debug: true, 
         auth: {
       user: 'user',
       pass: 'pass'
     },
       tls: { rejectUnauthorized: false } ,
     }));
    const mailOptions = {
    from: 'userl',
    to: `${email}`,
    subject: `Order nr: ${OrderId}`,
    forceEmbeddedImages: true,
    bcc: [],
  html: `<body>
  </body>`, 
  attachments: [
  ]
  };
  // console.log(request.body)
  transporter.use('compile', inlineBase64({cidPrefix: 'somePrefix_'}));
  transporter.use('/public', express.static('public'));

  transporter.sendMail(mailOptions,
  (error, info) => {
 if (error) {
    console.log("Error while sending email"+" "+error);
  } else {
    console.log('Email sent: ' + info.response);
  }
  });
    console.log("success");
    return response.send("{success}");
  } catch (error) {
   console.log(error)
  }
  });
 server.get("*", (req, res) => {
   return handle(req, res);
  });

Я буду очень рад любому совету, как чтобы исправить это.

...