【问题标题】:How to add auto triggers in node js?如何在节点js中添加自动触发器?
【发布时间】:2020-07-16 14:59:26
【问题描述】:

我想知道如何使用 mysql 数据库在 node js 中执行自动触发器。我不知道这类作品的确切词。但我可以提及我在寻找什么。

这里是场景:

场景 1:

在数据库中,它们是一个名为 send_email 的表,其中包含 id、time 和 email_address 列。所以我想在那个时候向那个特定的电子邮件发送一封电子邮件。如何在带有 mysql 数据库的 node js rest api 中完成这项任务?

场景 2:

在数据库中,它们是一个名为 send_notification 的表,它包含 id、date 和 email_address 列。所以我想在 1 天到那个日期之前发送一封电子邮件,提醒用户以及那个日期之后。

场景 3:

每天凌晨 12 点发送电子邮件或进行一些数据库操作

【问题讨论】:

    标签: mysql node.js triggers rest


    【解决方案1】:

    场景 1:

    在数据库中,它们是一个名为 send_email 的表,它包含 id、time 和 email_address 列。所以我想在那个时候向那个特定的电子邮件发送一封电子邮件。如何在带有 mysql 数据库的 node js rest api 中完成这项任务?

    解决方案:假设您希望每 3 小时发送一次电子邮件。创建一种从 mysql 获取数据并发送电子邮件的方法。

    let cron = require('node-cron');
    
    cron.schedule('0 0 */3 * * *', () => {
       //call method here
    });
    

    场景 2:

    在数据库中,它们是一个名为 send_notification 的表,它包含 id、date 和 email_address 列。所以我想在 1 天到那个日期之前发送一封电子邮件,提醒用户以及那个日期之后。

    解决方案:每天在特定时间运行 cron 作业并使用这些查询从数据库获取记录。

    SELECT * FROM FOO
    WHERE date >= NOW() + INTERVAL 1 DAY
    // This query will help to get records 1 day before
    
    SELECT * FROM FOO
    WHERE date >= NOW() - INTERVAL 1 DAY
    // This query will help to get records 1 day after
    
    let cron = require('node-cron');
    
    cron.schedule('0 0 0 * * *', () => {
       //call method here
    });
    

    场景 3:

    每天凌晨 12 点发送电子邮件或进行一些数据库操作

    解决方案

    let cron = require('node-cron');
    
    cron.schedule('0 0 0 * * *', () => {
       //call method here
    });
    

    Nodemailer 是一个帮助发送电子邮件的软件包

    var nodemailer = require('nodemailer');
    
    // create reusable transporter object using the default SMTP transport
    var transporter = nodemailer.createTransport('smtps://user%40gmail.com:pass@smtp.gmail.com');
    
    // setup e-mail data with unicode symbols
    var mailOptions = {
        from: '"Fred Foo ?" <foo@blurdybloop.com>', // sender address
        to: 'bar@blurdybloop.com, baz@blurdybloop.com', // list of receivers
        subject: 'Hello ✔', // Subject line
        text: 'Hello world ?', // plaintext body
        html: '<b>Hello world ?</b>' // html body
    };
    
    // send mail with defined transport object
    transporter.sendMail(mailOptions, function(error, info){
        if(error){
            return console.log(error);
        }
        console.log('Message sent: ' + info.response);
    });
    

    或没有 SMTP

    var nodemailer = require('nodemailer');
    var transporter = nodemailer.createTransport({
        transport: 'ses', // loads nodemailer-ses-transport
        accessKeyId: 'AWSACCESSKEY',
        secretAccessKey: 'AWS/Secret/key'
    });
    transporter.sendMail(data[, callback])
    

    【讨论】:

    • 能否请您提及此 node-cron 模块的链接? npm 链接?
    • @shehan96 我正在使用此链接npmjs.com/package/node-cron。在此您可以找到此包的全部详细信息。
    【解决方案2】:

    据我了解您的问题。您想在特定时间向用户发送电子邮件。

    Nodemailer 是一个用于 Node.js 应用程序的超酷模块,可以轻松发送电子邮件。

    let mailOptions = {
          from: '<FROM_EMAIL_ADDRESS>',
          to: '<TO_EMAIL_ADDRESS>',
          subject: 'Email from Node-App: A Test Message!',
          text: 'Some content to send'
    };
    

    您也可以SMTP传输器。

     let transporter = nodemailer.createTransport({
            service: 'gmail',
            auth: {
              user: '<FROM_EMAIL_ADDRESS>',
              pass: '<FROM_EMAIL_PASSWORD>'
            }
        });
    

    您可以安排这些电子邮件,您可以使用名为 node-cron 的节点模块。

    let cron = require('node-cron');
    
    cron.schedule('* * * * *', () => {
      //here your logic for email
    });
    
    

    【讨论】:

    • 感谢您的回答。其实我想知道的是如何触发上述类型的事件并进行一些活动。它可以是发送电子邮件或其他东西。
    • 您可以使用您的实现创建函数,并在给定的时间表内在您的 cron 中调用它们。
    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2016-03-31
    • 1970-01-01
    • 2013-06-07
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多