@Esm322

Почему не срабатывает post запрос при отправки формы через nodemailer?

Почему не срабатывает post запрос при отправки через nodemailer? При отправки выдаёт ошибку "POST http://localhost:****/api/feedback 500 (Internal Server Error)", и указывает на строку "fetch('/api/feedback'"
node:
const express = require('express');
const path = require('path');
const port = process.env.PORT || 5000;
const publicPath = path.join(__dirname, './public');

const nodemailer = require('nodemailer');

const app = express();

app.use(express.static(publicPath));
app.use(express.json());

app.get("/", (req, res) => {
  res.sendFile(publicPath);
})

app.post("/api/feedback", async(req, res) => {
  try {
    const { email, desc } = req.body;

    const transporter = nodemailer.createTransport({
      host: 'smtp.mail.ru',
      port: 465,
      secure: true,
      auth: {
        user: 'test@mail.ru',
        pass: 'test',
      },
    })

    await transporter.sendMail({
      from: 'test@mail.ru',
      to: 'test@mail.ru',
      subject: 'Test',
      text: `${email} ${desc}`,
    })
  } catch(err) {
    console.log(err);
    return res.status(500).send({
      status: 500,
      message: 'Cant post'
    })
  }
})

app.listen(port, () => console.log(`Listening on port http://localhost:${port}`))


client:
const form = document.querySelector('.form');

function sendFeedback(feedback) {
  fetch("/api/feedback", {
    method: 'POST',
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(feedback),
  })
    .then((response) => response.json())
    .then((data) => {
      console.log(data);
      alert('Success fetch')
    })
    .catch((err) => {
      console.log(err);
      alert('Error fetch');
    })
}

form.addEventListener('submit', (event) => {
  event.preventDefault();

  const feedbackData = new FormData(event.target);

  const feedback = Object.fromEntries(feedbackData);
  console.log('feedback:', feedback);

  sendFeedback(feedback);
})


Дебагер указывает, что ошибка находится в функции sendFeedback fetch('/api/feedback'). В консоле node пишет, что 'self-signed certificate in certificate chain'. Подскажите, пожалуйста, как исправить эту ошибку?
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Esm322 Автор вопроса
Проблема решилась добавлением
tls: {
    rejectUnauthorized: false
}

в тело transporter.createTransport({}):
const transporter = nodemailer.createTransport({
      host: 'smtp.mail.ru',
      port: 465,
      secure: true,
      auth: {
        user: 'почта',
        pass: 'пароль',
      },
      tls: {
        rejectUnauthorized: false
      }
    })


Примечание:
Если не отключить антивирус, то в письме данные будут приходить в виде 'undefined'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы