首页 > 解决方案 > 如何在节点 js 中添加自动触发器?

问题描述

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

这是场景:

方案 1:

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

场景二:

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

场景 3:

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

标签: mysqlnode.jstriggersrest

解决方案


方案 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
});

场景二:

在数据库中,它们是一个名为 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])

推荐阅读