修改代码如下:

exports.email = (req, res) => {
    // 查询邮箱是否被占用
    const userinfo = req.body;
    const sqlStr = `SELECT * FROM userinfo WHERE email = ?`;
    db.query(sqlStr, userinfo.email, (err, results) => {
        if (err) {
            return res.cc(err)
        }
        // 判断用户名是否被占用
        if (results.length > 0) {
            return res.cc("邮箱已被占用,请更换!");
        }

        // 判断是否距离上次发送时间超过60秒
        const currentTime = new Date();
        const lastSendTime = new Date(req.session.lastSendTime || 0);
        const timeDiff = currentTime - lastSendTime;
        if (timeDiff < 60000) {
            return res.cc("请稍后再发送验证码!");
        }

        // 生成四位随机数
        var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        var code = "";
        function randomNum(min, max) {
            return Math.floor(Math.random() * (max - min) + min);
        }
        for (var i = 1; i <= 4; i++) {
            var txt = str[randomNum(0, str.length)];
            code = code + txt;
        }

        // 发送邮箱验证码
        let transporter = nodemailer.createTransport({
            host: 'smtp.163.com',
            port: 465, // SMTP 端口
            auth: {   //发送者的账户和授权码
                user: '15576730892@163.com', //账户
                pass: 'LRTYRUNEMKHWLVZS', //smtp授权码,到邮箱设置下获取
            }
        });
        let mailOptions = {
            from: '15576730892@163.com', // 发送者昵称和地址
            to: userinfo.email, // 接收者的邮箱地址
            subject: "验证码", // 邮件主题
            html: code + "\n次元人欢迎您的到来!"
        };
        //发送邮件
        transporter.sendMail(mailOptions, (error, info) => {
            if (error) {
                return console.log(error);
            }
            res.write('邮件发送成功 ID:', info.messageId);
        });

        // 更新最后发送时间
        req.session.lastSendTime = currentTime;

        res.send({
            status: 0,
            message: '验证码发送成功!',
            results: code
        });
    })
}

上述代码中使用了req.session.lastSendTime来保存最后发送验证码的时间,如果距离上次发送时间不足60秒,则会返回错误提示。发送成功后,会更新req.session.lastSendTime为当前时间

exportsemail = req res = 查询邮箱是否被占用 const userinfo = reqbody; const sqlStr = SELECT FROM userinfo WHERE email = ; dbquerysqlStr userinfoemail err results = if err ret

原文地址: https://www.cveoy.top/t/topic/iA6c 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录