CORS не работает на Heroku, но работает локально с Node js - PullRequest
0 голосов
/ 29 января 2020

У меня есть контактная форма на моем Angular Js веб-сайте с серверной частью express и почтовой программой для работы с электронной почтой, которая отлично работает, когда я тестирую ее локально, но при развертывании ее в Heroku я получаю ошибку: Запрос CORS не выполнен. Я был на этом некоторое время без пути, любое предложение было бы здорово. Спасибо

вот мой код

const cors = require("cors");
const http =  require("http");
const path = require('path');
const nodemailer = require("nodemailer");
var bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(cors({origin:"*"}));


const port = process.env.PORT || 1996

app.use(express.static(__dirname + "/dist/Orisha"));

app.get('/*', (req,res)=>res.sendFile(path.join(__dirname+"/dist/Orisha/index.html")));

app.post("/sendmail", (req,res)=>{

    console.log(req.body, 'data of form');
    var transporter = nodemailer.createTransport({
      service: 'gmail',
      host: 'smtp.gmail.com',
      secure: 'true',
      port: '465',
      auth: {
        user: 'hhdhjssw@gmail.com', // must be Gmail
        pass: 'password'
      }
    });

    var mailOptions = {
        from: `${req.body.email}`,
        to: 'hdsywuxwjd@gmail.com', // must be Gmail
        cc:`${req.body.firstName} <${req.body.email}>`,
        subject: `${req.body.subject}`,
        html: `
                <table style="width: 100%; border: none">
                  <thead>
                    <tr style="background-color: #000; color: #fff;">
                      <th style="padding: 10px 0">Name</th>
                      <th style="padding: 10px 0">E-mail</th>
                      <th style="padding: 10px 0">Message</th>
                      <th style="padding: 10px 0">Feedback</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <th style="text-align: center">${req.body.firstName} ${req.body.lastName}</th>
                      <td style="text-align: center">${req.body.lastName}</td>
                      <td style="text-align: center">${req.body.Email}</td>
                      <td style="text-align: center">${req.body.message}</td>
                      <td style="text-align: center">${req.body.feedback}</td>
                    </tr>
                  </tbody>
                </table>
              `
      };

      transporter.sendMail(mailOptions, (error, info) => {
        if (error) {
          console.log(error);
        } else {
          console.log('Email sent: ' + info.response);
          res.status(200).json({
            message: 'successfuly sent!'
          })
        }
      });

})


const server = http.createServer(app);

server.listen(port,()=>console.log("Running on http://localhost:1996/"))

И это ошибка, которую я получаю на Heroku:

enter image description here:

1 Ответ

1 голос
/ 29 января 2020

Это потому, что ваш https пытается получить доступ к ресурсу, который на самом деле работает через http. Политика того же происхождения

Вы можете решить эту проблему двумя способами:

  1. Необходимо проверить переменные производственной среды, чтобы проверить, не пытаетесь ли вы чтобы получить доступ к API, размещенному на dev (http) в рабочей среде (https)
  2. Heroku обслуживает ваше приложение как через http, так и через https. Попробуйте получить доступ к вашему приложению на герою, используя http. Как это: http://orishaa.herokuapp.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...