Модель Mon goose не принимает нулевое значение, но выводит нормально в console.log - PullRequest
0 голосов
/ 08 марта 2020

Я создаю токен для Add User, который отправляет электронное письмо пользователю с сгенерированным токеном. Проблема в том, что он не работает 100% времени, и токен иногда рассматривается как нулевое значение.

Ошибка:

TypeError: Cannot set property 'confirmRegisterToken' of null

Код:

waterfall([
                    function(done) {
                        crypto.randomBytes(20, function(err, buf) {
                            token = buf.toString('hex');
                            done(err, token);
                        });
                    },

                    function(token, done) {
                        User.findOne({ email: email }, function(err, user) {
                            console.log("USER FINDONE - TOKEN");
                            if(token === null) {
                                console.log("token is null");
                            }
                            user.confirmRegisterToken = token;
                            console.log("user.confirmRegisterToken: " + user.confirmRegisterToken);
                            user.isConfirmed = false;

                            user.save(function(err) {
                                done(err, token, user);
                            });
                        });
                    },
                    function(token, user, done) {
                        console.log("SMTP TRANSPORT - TOKEN");
                        var smtpTransport = nodemailer.createTransport({
                            service: 'Gmail',
                            auth: {
                                user: process.env.EMAIL,
                                pass: process.env.EMAIL_PW
                            }
                        });
                        var mailOptions = {
                            to: user.email,
                            from: process.env.EMAIL,
                            subject: '[redacted]',
                            text: 'Click on the link to confirm your registration.' +
                            'http://' + req.headers.host + '/confirm/' + token + '\n\n' + 
                            'This token expires in 24 hours!' +
                            'Your generated password is your given firstname and surname (no space & case sensitive)'
                        };
                        smtpTransport.sendMail(mailOptions, function(err) {
                            console.log('Mail sent');
                            res.redirect('/admin/adduser');
                            done(err, done, token);
                        });
                    }
                ], function(err) {
                    if(err) return next(err);
                    res.redirect('/admin/adduser');
                    done();
                });

Я дал примерную попытку из 10 попыток, и она работает 50% времени (как ни странно). Может быть, это что-то про asyn c и как оно работает, но я не уверен, поэтому мне нужна помощь для этого.

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