Я пишу код подтверждения электронной почты в node js. Следуя подходу, я использую
- Генерировать 5 di git случайное число
- Сохранять данные пользователя (электронная почта, пароль и т.д. c) вместе с 5 di git случайным числом в база данных (mongodb)
- отправить случайное число на адрес электронной почты.
- применить
setTimeout()
метон ждать 20 минут для подтверждения адреса электронной почты - через 20 минут, если пользователь проверяет адрес тогда это нормально, в противном случае удалите пользовательские данные из базы данных.
, но этот код продолжает ждать 20 минут, пока не закончится период setTimeout. есть ли способ применить эту стратегию, не дожидаясь 20 минут? Я знаю, что это просто, но не могу разобраться. Ниже приведен код ...
const emailCode = Math.floor(Math.random()*90000)+10000;
try
{
const user = new User({...req.body, emailCode});
req.user = user;
await user.save()
}
catch(err)
{
if(err.keyPattern)
{
res.status(409).send({err: "User Already Exists"})
}
else if(err.errors.email)
{
res.status(400).send({err: err.errors.email.message})
}
else if(err.errors.password)
{
res.status(400).send({err: err.errors.password.message})
}
res.status(400).send(err);
}
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '',
pass: ''
}
});
const mailOptions = {
from: '',
to: req.body.email,
subject: "Confirm Your Email Address",
text: "Use the following 5 digit code to confirm your email address \n"+emailCode.toString()
};
try
{
const mail = await transporter.sendMail(mailOptions);
console.log("here");
await new Promise(resolve =>
{
setTimeout(resolve, 10000)
})
console.log("there");
console.log(req.user.verify)
if(!req.user.verify)
{
req.user.remove();
}
}
catch(err)
{
res.send(err)
}