![](/img/trans.png)
[英]NodeJs: Mongodb query never called in cron job with node-cron
[英]Booking reminder Nodemailer node-cron MongoDB
我在发送预订提醒 email 时遇到问题。 我使用 nodemailer 和 node-cron。 它运作良好。 我想从数据库中读取日期,例如在预订前一周发送 email。 我不知道该怎么做。 我的 model:
start_time: {
type: String,
required: true,
},
hour: {
type: String,
required: true,
},
courtId: {
type: String,
required: true,
},
userId: {
type: ObjectId,
ref: 'userModel',
required: true,
},
});
const cron = require('node-cron');
const nodemailer = require('nodemailer');
const { getMaxListeners } = require('../config/database');
const sendEmail = function () {
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: `${process.env.EMAIL_ADDRESS}`,
pass: `${process.env.EMAIL_PASSWORD}`,
},
});
const mailOptions = {
from: `${process.env.EMAIL_ADDRESS}`,
to: `${''}`,
subject: 'Link To Reset Password',
text:
'wiadomosć',
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
};
module.exports.task = function () {
cron.schedule('00 * * * * *', () => {
console.log('send');
//sendEmail();
});
};
我认为开始时间解析到日期? 一周后怎么看这个预订?
model:***(我将 start_time 更改为类型:日期并添加了 email_sent)
start_time: {
type: Date,
required: true,
},
email_sent: {
type:Boolean,
default:"false",
required:true
},
hour: {
type: String,
required: true,
},
courtId: {
type: String,
required: true,
},
userId: {
type: ObjectId,
ref: 'userModel',
required: true,
},
});
服务器:
cron.schedule('00 * * * * *', () => {
Modal.find({}).
then(allUsers => {
for(let user of allUsers){
if(Date.now() < (user.start_time - (24*60*60*1000) * 7) && user.email_sent === false){
//sendEmail();
// here you need to update user.email_sent: true. and save.
}
}
})
});
*我也建议这样做,只找到 email_sent: false。 您可以使用 mongoose 查看如何操作。 (那么你不需要在 if 语句中检查它) *Model.find({ email_sent: "false" })
我只是在我的脑海中做了它,我没有检查,你可能会遇到的错误:
这只是如何实现它的想法。 我没有测试代码。 请尝试代码,如果您遇到任何问题,请告诉我
我正在将字符串解析为 DATE。 2021-1-16 至 2021-01-15T23:00:00.000Z
const nodemailer = require('nodemailer');
const { getMaxListeners } = require('../config/database');
const reservationModel = require('../models/reservationModel');
const sendEmail = function () {
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: `${process.env.EMAIL_ADDRESS}`,
pass: `${process.env.EMAIL_PASSWORD}`,
},
});
const mailOptions = {
from: `${process.env.EMAIL_ADDRESS}`,
to: `${''}`,
subject: 'Link To Reset Password',
text: 'wiadomosć',
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
};
module.exports.task = function () {
cron.schedule('00 * * * * *', () => {
console.log('scheduled');
reservationModel.find({ email_sent: false }).then(allReservation => {
for (let result of allReservation) {
let date = new Date(result.start_time);
console.log(date);
if (Date.now() < date - 24 * 60 * 60 * 1000 * 7) {
console.log('send');
sendEmail();
}
}
});
});
};
邮件从未发送 2021-01-15T23:00:00.000Z - 字符串到日期 1610277840044 Date.now()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.