#node.js #email #schedule
#node.js #Адрес электронной почты #Расписание
Вопрос:
Я хочу реализовать настройку в своем приложении node, чтобы сервер мог отправлять электронные письма нескольким людям за 24 часа до определенной даты. Эта дата поступает из базы данных.
Например: дата 25 декабря, поэтому мне нужно, чтобы мой сервер отправлял письма группе клиентов 24 декабря. Как мне закодировать его сегодня, чтобы он отправлял почту в будущем?
(Мое приложение node размещено на VPS, поэтому оно будет работать всегда.)
Ответ №1:
Вы можете использовать модули расписания узлов. https://www.npmjs.com/package/node-schedule
var schedule = require('node-schedule');
var date = new Date(2020, 12, 24, 5, 30, 0);
var j = schedule.scheduleJob(date, function(y){ });
Или вы можете сделать это по старинке. Что-то вроде.
const then = "2020-12-24 05:00:00";
const inter = setInterval(() => {
const now = new Date();
if (Date.parse(now) > Date.parse(then)) {
clearInterval(inter);
}
}, 1000 * 60 * 60 );
Редактировать:
У вас может быть что-то вроде.
const schedules = {};
function dbUpdate() {
const somedate = new Date();
const userid = getUpdatedUser();
cancelSchedule(userid);
createSchedule(userid, somedate);
}
function createSchedule(userid, somedate) {
const date = new Date(somedate);
schedules[userid] = schedule.scheduleJob(date, function(y){ });
}
function cancelSchedule(userid) {
schedules[userid].cancel();
}
Не проверено, но что-то в этом роде
Комментарии:
1. Я понял базу, но у меня были сомнения. Что произойдет, если я запущу сервер сегодня и перезапущу его между ними? Повлияет ли это каким-либо образом на запланированное задание? Кроме того, во 2-м подходе, не будет ли это, если оператор будет выполняться каждый раз после 24 декабря? Я хочу, чтобы электронное письмо отправлялось только один раз, и в этом случае будут отправляться электронные письма после каждого (1000*60*60 ) время после 24 декабря.
2. Нет, расписание будет выполняться при каждом перезапуске сервера. Да, но вы можете использовать clearInterval, когда выполняется оператор. developer.mozilla.org/en-US/docs/Web/API /…
3. Привет, у меня возникли проблемы с планировщиком узлов. Мне нужно запустить его для списка пользователей, и этот список может изменяться / обновляться в БД. Итак, я поместил планировщик в setInterval на 1 час, чтобы он получал обновленные данные из БД, но, к сожалению, теперь он складывает задания каждый час, но мне это нужно, чтобы перепланировать задание для пользователей, у которых уже есть набор заданий. Как я могу этого добиться?
4. Не ставьте расписание в интервал. Он сделает это за вас. просто запустите необходимый код в расписании
5. Но как только мой планировщик выполнит задание для каждого пользователя, что, если список обновится в моей БД? Задания уже назначены в соответствии со старым списком пользователей. Я хочу, чтобы он получал обновленный список из базы данных и устанавливал задания для новых добавленных пользователей без необходимости перезагрузки сервера.