NodeJs的一次实用

721 阅读1分钟

起因

想定时抓取某个接口的数据,然后解析数据,通过邮件通知给我。

用到的一些库

1、https 用来发送网络请求 2、node-schedule 用来实现定时任务 3、nodemailer 用来发送邮件

安装依赖

npm install node-schedule
npm install nodemailer

发送请求

function getInfo(url) {
    https.get(url, (res) => {
        res.setEncoding("utf8");
        let body = "";
        res.on("data", (data) => {
            body += data;
        });
        res.on("end", () => {
            console.log(body);
        });
    });
}

定时任务

介绍一下简单用法

  1. 每天一点执行一次 rule.hour =1;
  2. 每小时的一分钟执行一次 rule.minute =1;
  3. 每分钟的一秒执行一次 rule.second =1;
  4. 每10s执行一次 rule.second = [0,10,20,30,40,50];
  5. 取消任务 scheduleJob会返回一个job对象,调用job.cancel()可以取消任务。
var rule = new schedule.RecurrenceRule(); 
rule.minute = Math.ceil(Math.random()*60);

function scheduleCronstyle() {
    //1小时内随机执行一次
    schedule.scheduleJob(rule, () => {
        console.log("scheduleCronstyle:" + new Date());
        getInfo(getUrl);
        rule.minute = Math.ceil(Math.random()*60);
    });
};

发送邮件

我这里使用的QQ邮箱,使用第三方发送邮件需要打开授权,我这里开启的是POP3/IMAP,然后用授权码登录。授权方法->

const transporter = nodemailer.createTransport({
    host: "smtp.qq.com",
    port: 465, // SMTP 端口
    secureConnection: true, // 使用了 SSL
    auth: {
        user: "xxx@qq.com",
        pass: "xxx", //授权码
    },
});

function sendEmail(time, left) {
    let mailOptions = {
        from: "<xxx@qq.com>",
        to: "xxx@qq.com",
        subject: "标题",
        text: "内容",
    };
    transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
            console.log(error);
        } else {
            console.log("Email sent: " + info.response);
        }
    });
}

结果

哈哈,还是比较成功的,达到了我预期的目标。

注意事项

邮件接收的延迟比较大,大概3分钟左右,耐心等候,另外我在QQ邮箱的发件箱里没看到已发送的邮件,可能不会显示。 demo就不发了,比较简单,这几个模块组装起来就可以运行了。