Как инициировать события в Node JS, когда будет достигнута будущая дата, время, сохраненное в базе данных? - PullRequest
0 голосов
/ 02 января 2019

Я предоставляю пользователям функциональность, в которой «они выбирают время ближайшего будущего, дату, отдавая заказ. Это время и дата заказа хранятся в базе данных».

Как вызвать функциювыполнить что-то, когда время и дата в базе данных достигнуты?

Я собираюсь использовать Node JS, Express JS, Mongo DB, React JS для внутреннего интерфейса, сервера, базы данных и внешнего интерфейса соответственно.Я прошу архитектуру или создаю такой триггер, как это можно выполнить, а не полный код.

Любая рекомендация по поддержке пакетов NPM будет полезной.Спасибо.

Примечание. Это моя первая разработка приложений на любом языке.Я изучил эти технологии только на курсах Удеми.Приложение будет предлагать пользователям выбирать дату в будущем, а когда будет достигнута будущая дата, приложение выполняет какую-то функцию для них.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Создайте коллекцию для заказов:

 const orders = db.collection("orders");

Затем создайте индекс на срок выполнения для более быстрой индексации:

orders.createIndex({ dueDate: 1 });

Теперь вы можете запустить службу с минимальной датойи проверьте, была ли достигнута уже достигнутая, в противном случае спите:

const sleep = ms => new Promise(res => setTimeout(res, ms));

(async function() {
  while(true) {  // check forever
    await sleep(2000);
    const cursor = orders.find({ dueDate: { $lte: Date.now() }, processed: false }); // only take those that are done but not yet processed
    while(await cursor.hasNext()) {
      const order = await cursor.next();   
      // process order
      await orders.updateOne(order, { $set: { processed: true }});
    }
  }
})();

Затем просто добавьте новые документы в эту коллекцию и наблюдайте за магией:)

 orders.insertOne({ processed: false, dueDate: Date.now() + 5000 });
0 голосов
/ 02 января 2019

Вы можете использовать следующий пакет для достижения вашей цели: node-schedule

Например:

var schedule = require('node-schedule');
var date = // get date from databse and create a date object for eg: new Date(2012, 11, 21, 5, 30, 0);

var j = schedule.scheduleJob(date, function(){
  console.log('The world is going to end today.');
  // once the job is finished remove the database entry mark it as completed so that it won't run again
});

Примечание: при запуске вы также можете добавить проверку, чтобы проверить дату ваших заданий и график, если дата наступит в будущем, или вызвать метод, если он уже прошел и не завершен, это полезно при развертывании приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...