Node.js,基于日期时间的提醒

问题描述 投票:0回答:3

我正在构建一个 SaaS 应用程序,用户登录并为未来的特定日期和时间创建提醒,当时间到了时,我的应用程序负责提醒各个用户他/她设置的提醒在过去 示例:

假设用户

"Foo" 于 2018 年 4 月 27 日下午 2:30(未来的日期时间)登录并创建提醒。


我的应用程序应像任何其他提醒应用程序一样在该确切日期时间向

"Foo"

发送电子邮件。


像这样,可以为数百个用户提供数千个活动提醒。

技术

Node.js

我尝试了什么

我尝试过像

node-schedule

这样的软件包和其他 cron-job 解决方案,但我相信/发现 - Cron-jobs 并不是为解决像我这样的问题而设计的。

请帮我解决问题。谢谢

不确定您是否仍在寻找解决方案,但我遇到了这个:
node.js cron scheduled-tasks reminders
3个回答
2
投票

它是一个轻量级的node.js调度库。

如果是通过电子邮件提醒,您应该尝试SendGrid或Mailgun。他们都免费提供数量有限的电子邮件。您还可以尝试使用 Twilio 进行短信提醒。所有这些都可以很容易地设置,您只需在设定的提醒时间调用 api 调用即可。

0
投票

我将采用基于 Redis 的解决方案,该解决方案将 ttl 设置为 bull,当时间流逝时选择 yp 任务并将电子邮件发送给收件人。

0
投票
const express = require('express'); const bodyParser = require('body-parser'); const { Queue, Worker } = require('bull'); const nodemailer = require('nodemailer'); const app = express(); const port = 3000; // In-memory storage for reminders (replace this with a database in production) const remindersQueue = new Queue('reminders', { redis: { port: 6379, host: 'localhost' } }); app.use(bodyParser.json()); // Endpoint for creating reminders app.post('/create-reminder', async (req, res) => { const { email, datetime, message } = req.body; const job = await remindersQueue.add({ email, message }, { delay: new Date(datetime) - new Date() }); res.status(200).json({ success: true, message: 'Reminder created successfully', jobId: job.id }); }); // Set up a worker to process reminders new Worker('reminders', async job => { const { email, message } = job.data; // Send email await sendEmail(email, 'Reminder', `Reminder: ${message}`); }); // Function to send email using nodemailer (replace with your email service details) async function sendEmail(to, subject, text) { const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: '[email protected]', pass: 'your-email-password', }, }); const mailOptions = { from: '[email protected]', to, subject, text, }; return transporter.sendMail(mailOptions); } // Start the server app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); })

;
    

© www.soinside.com 2019 - 2024. All rights reserved.