You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

寻求Node.js中定时每日执行任务及发送通知的NPM模块

Node.js 定时任务与通知解决方案

嘿,针对你Node.js应用的两个需求,我给你整理了业内常用且稳定的实现方案,分模块来讲:

一、每日重复执行任务的定时模块推荐

1. node-schedule(最灵活的选择)

我平时做项目时最常用这个模块,它支持基于日期的精确调度,完全能满足"指定时间每日重复"的需求,而且语法直观,支持本地时间配置。

安装命令:

npm install node-schedule

基础示例(每日本地时间9点执行任务):

const schedule = require('node-schedule');

// 定义每日9点的规则:分钟0,小时9,其他字段默认通配(即每天)
const job = schedule.scheduleJob('0 9 * * *', function() {
  console.log('每日9点的定时任务执行了!');
  // 这里可以放你要执行的业务逻辑,比如调用通知函数
});

如果需要更复杂的规则,比如每周一到周五的9点,只需要调整cron表达式:0 9 * * 1-5

2. node-cron(轻量简洁的替代)

如果你的需求相对简单,node-cron是个更轻量的选择,它基于标准cron语法,学习成本低。

安装命令:

npm install node-cron

示例代码:

const cron = require('node-cron');

// 每日本地时间9点执行
cron.schedule('0 9 * * *', () => {
  console.log('每日9点的定时任务执行了!');
}, {
  scheduled: true,
  timezone: 'Asia/Shanghai' // 指定本地时区,确保时间准确
});

二、本地时间9点发送邮件+短信通知

结合上面的定时模块,我们可以在任务触发时调用邮件和短信模块发送通知:

1. 邮件通知:nodemailer

这是Node.js生态中最成熟的邮件发送库,支持QQ邮箱、Gmail、企业邮箱等多种服务商。

安装命令:

npm install nodemailer

邮件发送示例(结合node-schedule):

const schedule = require('node-schedule');
const nodemailer = require('nodemailer');

// 配置邮件传输器(以QQ邮箱为例)
const transporter = nodemailer.createTransport({
  host: 'smtp.qq.com',
  port: 465,
  secure: true,
  auth: {
    user: 'your-qq-email@qq.com',
    pass: 'your-email-authorization-code' // 注意是邮箱授权码,不是登录密码
  }
});

// 发送邮件函数
const sendEmail = async () => {
  try {
    await transporter.sendMail({
      from: '"你的应用" <your-qq-email@qq.com>',
      to: 'recipient@example.com',
      subject: '每日定时通知',
      text: '这是每日上午9点的邮件通知!',
      html: '<b>这是每日上午9点的邮件通知!</b>'
    });
    console.log('邮件发送成功');
  } catch (error) {
    console.error('邮件发送失败:', error);
  }
};

// 定时触发邮件发送
schedule.scheduleJob('0 9 * * *', sendEmail);

2. 短信通知:twilio(通用国际服务商)

如果需要发送短信,Twilio是个靠谱的选择,支持全球多数地区。国内用户也可以选择阿里云短信、腾讯云短信等服务商,用法类似,这里以Twilio为例:

安装命令:

npm install twilio

短信发送示例(结合定时任务):

const schedule = require('node-schedule');
const twilio = require('twilio');

// 初始化Twilio客户端(需在Twilio官网获取账号SID和Auth Token)
const client = twilio('your-twilio-account-sid', 'your-twilio-auth-token');

const sendSMS = async () => {
  try {
    await client.messages.create({
      body: '这是每日上午9点的短信通知!',
      from: 'your-twilio-phone-number',
      to: 'recipient-phone-number' // 格式如+8613xxxxxxxxx
    });
    console.log('短信发送成功');
  } catch (error) {
    console.error('短信发送失败:', error);
  }
};

// 定时触发短信发送
schedule.scheduleJob('0 9 * * *', sendSMS);

3. 整合邮件+短信的完整示例

把两个通知逻辑合并到一个定时任务里:

const schedule = require('node-schedule');
const nodemailer = require('nodemailer');
const twilio = require('twilio');

// 初始化邮件传输器
const emailTransporter = nodemailer.createTransport({
  // 你的邮件配置
});

// 初始化Twilio客户端
const smsClient = twilio('your-twilio-account-sid', 'your-twilio-auth-token');

// 统一通知函数
const sendDailyNotifications = async () => {
  try {
    // 发送邮件
    await emailTransporter.sendMail({
      // 邮件内容配置
    });
    // 发送短信
    await smsClient.messages.create({
      // 短信内容配置
    });
    console.log('每日通知发送完成');
  } catch (error) {
    console.error('通知发送失败:', error);
  }
};

// 本地时间每日9点执行
schedule.scheduleJob('0 9 * * *', sendDailyNotifications);

注意事项

  • 时区配置:如果服务器在境外,务必在定时任务中指定本地时区(如timezone: 'Asia/Shanghai'),避免时间偏差。
  • 服务稳定性:建议配合PM2等进程管理工具,确保应用意外退出后自动重启,定时任务不会中断。
  • 权限配置:邮件和短信服务商需要正确配置授权信息(如邮箱授权码、Twilio的SID和Token),否则会发送失败。

内容的提问来源于stack exchange,提问作者Vithal Reddy

火山引擎 最新活动