nodemailer всегда отправляет один и тот же ответ, res.send () не работает - PullRequest
0 голосов
/ 02 мая 2020

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

сервер

router
    .post('/send-email', function (req, res) {

        let senderEmail = req.body.email;
        let message = req.body.message;

        let transporter = nodemailer.createTransport({
            host: 'mail.domain.com',
            port: 25,
            secure: false,
            auth: {
                user: "contact@domain.com",
                pass: "password"
            },
            tls: {
                secure: false,
                ignoreTLS: true,
                rejectUnauthorized: false
            }
        });

        let mailOptions = {
            from: senderEmail,
            to: 'contact@domain.com',
            subject: `TITLE`,
            html: `
                ${message}
            `
        };

        transporter.sendMail(mailOptions, (error, info) => {
            if (error) {
                res.send({ ok: false, message: "fail" })
            } else {
                res.send({ ok: true, message: "success" })
            }
        });

    });

клиент

async function sendEmail(email, message) {

    let response = fetch("/send-email", {
        method: "POST",
        headers: {
            Accept: "application/json",
            "Content-type": "application/json"
        },
        body: JSON.stringify({ email: email, message: message })
    })

    let result = await response;

    console.log(result)  // Always the same response
}

Но сервер всегда отправляет один и тот же ответ, независимо от того, была ли отправка электронной почты неудачной или нет ...

enter image description here

За свою жизнь я не могу понять, чего мне не хватает?

1 Ответ

1 голос
/ 02 мая 2020

Таким образом, отличающаяся часть ответа здесь будет в теле ответа, и вы должны фактически прочитать тело с помощью response.json(), чтобы получить его и увидеть его. См. MDN для получения для деталей.

Все ваши снимки экрана - это заголовки, которые не отличаются от двух разных отправляемых вами ответов.

Пример, который показывает чтение тела и синтаксический анализ как JSON :

async function sendEmail(email, message) {

    let result = await fetch("/send-email", {
        method: "POST",
        headers: {
            Accept: "application/json",
            "Content-type": "application/json"
        },
        body: JSON.stringify({ email: email, message: message })
    }).then(response -> response.json());   // read the response body and parse it as JSON

    console.log(result);
    return result;
}

Обратите внимание, вы также должны отлавливать ошибки здесь, либо в вызывающем, либо в этой функции (я не уверен, что лучше для вашей ситуации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...