我正在为用户提供一项功能,“他们在下订单时选择不久的将来的时间和日期。此订单的时间和日期存储在数据库中。”
在到达数据库中的时间和日期后,如何触发函数执行某些操作?
我将分别对后端,服务器,数据库和前端使用Node JS,Express JS,Mongo DB,React JS。我要的是架构或创建触发器的执行方式,而不是完整的代码。
任何支持NPM软件包的建议都将有所帮助。谢谢。
注意:这是我使用任何语言进行的第一个应用程序开发。我仅从Udemy课程中学到了这些技术。该应用程序将让用户选择将来的日期,当到达将来的日期时,该应用程序将为他们执行某些功能。
答案 0 :(得分:0)
您可以使用以下软件包来实现您的目标: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
});
注意: 在启动时,您还可以添加验证以检查作业的日期并安排日期(如果该日期是将来的日期),或者如果该日期已经过去且尚未完成,则调用该方法,这在部署应用程序时很有用
答案 1 :(得分:0)
为订单创建一个集合:
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 });