【问题标题】:Node.js email-verification with mongoose使用 mongoose 进行 Node.js 电子邮件验证
【发布时间】:2019-01-10 09:03:27
【问题描述】:

我正在使用护照和猫鼬进行 Node.js 和电子邮件验证。 现在我正在测试代码并得到一个错误,但我无法修复它。 这是我的问题和下面发布的代码:

我的 app.js 我有

var nev = require('email-verification')(mongoose);
require('./routes/db/email-verification')(nev);
require('./routes/db/passport')(passport,nev);

我的电子邮件-verificaiton.js

var User = require('./ModelUser');


module.exports = function(nev){
    nev.configure({
        ...
        ...
    },function(err,options){
            if(err)
                return err;
            console.log('test');
        });

    nev.generateTempUserModel(User,function(err,tempUserModel){
        if(err){
            return err;
        }

        console.log('checked');
});


};

我的护照.js

module.exports = function (passport, nev) {

...
...

passport.use('local-signup', new LocalStrategy({
        usernameField: 'email', //dummy string
        passwordField: 'password', //dummy string
        passReqToCallback: true
    }, function (req, email, password, done) {



        var newUser = new User();

        newUser.email = email;
        newUser.password = password;

        nev.createTempUser(newUser, function( err, existingPersistentUser, newTempUser){
            if(err) console.error(err);

            if(existingPersistentUser){
                console.log('E-mail already exists');
                return done(null, false, req.flash('signupMessage', 'E-mail already exists'));
            }
            if(newTempUser){
                var URL = newTempUser[nev.options.URLFieldName];

                nev.sendVerificationEmail(email, URL, function(err, info){

                if(err) console.error(err);
                    console.log('An email has been sent to you. Please check it to verify your account.');
                    return done(null);
                    })
                } else{
                    console.log('You have already signed up. Please check your email to verify your account.');
                    return done(null);
                }
            })

我收到一个错误 TypeError: Cannot read property 'createTempUser' of undefined 我不知道为什么我的“nev”变量在我的 passport.js 中未定义。 请任何人都可以帮助我>?这很难。

【问题讨论】:

  • 在你app.js,直接在var nev = require('email-verification')(mongoose);之后的那一行,尝试添加console.log(nev),看看它是否在那里未定义,然后将其传递给passport.js中导出的函数跨度>
  • @PatNeedham 你好,我在 var nev = require('email-verification')(mongoose); 之后添加了日志但它不是未定义的,所以我在 module.exports = function (passport, nev) { 它显示了 4 个日志,其中一个与 app.js 文件中的日志相同,然后它有 3 个未定义。
  • @PatNeedham 嗨,我解决了这个问题,谢谢!
  • 你在函数内部做了什么改变?

标签: node.js npm mongoose email-verification


【解决方案1】:

email-verificaiton.js 中,将其更改为更像这样:

function verification(nev) {
    nev.configure({
        ...
        ...
    },function(err,options){
            if(err)
                return err;
            console.log('test');
        });

    nev.generateTempUserModel(User,function(err,tempUserModel){
        if(err){
            return err;
        }

        console.log('checked');
});


};

module.exports = {verification}

然后在app.js里面你可以改变

var nev = require('email-verification')(mongoose);

成为

var nev = require('email-verification').verification(mongoose);

【讨论】:

  • 我在 app.js 中多次调用了 passport.js,所以第一次 nev 有这个值,但是其他的没有定义,所以我通过将 app.js 中的 3 行放在底部来解决这个问题代码
猜你喜欢
  • 2011-05-11
  • 2017-11-19
  • 2011-01-31
  • 2014-03-05
  • 1970-01-01
  • 2023-03-21
  • 2023-03-14
相关资源
最近更新 更多