首页 > 解决方案 > 通过 express 在浏览器中设置警告框

问题描述

我正在使用快递按nodemailer模块发送电子邮件。我的代码如下:

app.post('/', (req, res) => {
const output = `
<p>You have new one contact request</p>
<h3>Contact Details</h3>
<ul>
<li>Name:${req.body.name}</li>
<li>Email:${req.body.email}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;

// create reusable transporter object using the default SMTP transport
let transporter = nodeMailer.createTransport({
    host: "mail.gmail.com",
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
        user: 'mymail@gamil.com', // generated ethereal user
        pass: '2020' // generated ethereal password
    },
    tls: {
        rejectUnauthorized: false
    }
});

// send mail with defined transport object
let mailOptions = {
    from: "mymail@gamil.com", // sender address
    to: "myfriend@gmail.com", // list of receivers
    subject: "the subject", // Subject line
    html: output // html body
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
    // , info.res
    console.log("Message sent: %s", info.messageId);
    console.log("Preview URL: %s", nodeMailer.getTestMessageUrl(info));
   res.render('index', { msg: 'email has been sent' });
    res.redirect('back');
});});

单击submit按钮后,以下代码将重定向到联系页面:

        res.redirect('back');

然后通过此代码显示一条消息:

       res.render('index', { msg: 'email has been sent' });

现在我的目标是在警告框中显示文本,而不是通过上述代码显示文本。我尝试过的是:

res.render('index','<script>alert("email has been sent")</script>');

但这根本不起作用。顺便说一句,我没有使用ajax. 那么有什么想法或解决方案吗?

标签: javascriptexpressnodemailer

解决方案


直接从服务器响应运行脚本<script>doSomethingMaybeBad();</script>不太可能在现代浏览器中运行,因为它可能被用作攻击。无论如何,一目了然,您似乎并没有<html>...</html>通过这些请求在客户端加载整个页面。

我建议收听来自客户端的 ajax 响应,然后显示警报。在没有看到所有代码的情况下,这是一个粗略的想法:

代替:

res.render('index','<script>alert("email has been sent")</script>');

使用 JSON 响应,或与您之前使用的格式相同的响应,如下所示:

{ msg: 'email has been sent', status: 200 }

然后在你的客户端代码中,替换这样的东西(只是猜测你有什么,因为你没有发布客户端示例):

$('msg').html(response.msg)

和:

if (response.status === 200) {
    alert(msg.msg);
    // consider redirecting here if needed?
} else {
    // show error, jQuery in this example however may be different for your current
    $('msg').html(response.msg)
}

推荐阅读