NodeJS:回调不是函数 - 电子邮件验证

时间:2016-07-05 21:37:06

标签: android node.js mongodb email express

我正在尝试在android上实现用户注册系统,节点作为我的后端服务器。

我在localhost上使用Node 4.4.5,并使用“email-verification”包 - https://www.npmjs.com/package/email-verification

因此,根据Android的要求,会发送带有验证链接的确认电子邮件,该工作正常。

单击链接时,会发出GET请求,确认用户,将其添加到MongoDB数据库,并发送JSON响应。

向用户发送确认帐户的电子邮件。

发送确认电子邮件后,服务器崩溃。

这是我的代码 -

router.get('/email-verification/:URL', function(req, res, next){
var url = req.params.URL;
console.log('email-verify-start');

nev.confirmTempUser(url, function(err, user) {

    console.log('error is :' + err);
    if (user) {
        nev.sendConfirmationEmail(user.email, function(err, info) {
            if (err) {
                console.log('sending_conf_email_failed');
                return res.json({'email': 'sending_conf_email_failed'});
            }

            console.log('user_confirmed');
            res.json({
                'email': 'user_confirmed'
            });

            console.log('Done, and confirmed');
        });
    } else {
        console.log('conf_temp_ser_failed');
        return res.json({'email': 'conf_temp_ser_failed'});
    }
});
});

这是我的日志 -

error is :null
user_confirmed
Done, and confirmed
GET /register/email-verification/SfC9VlnUv91RkFBHDURIbHodnYme0RdfbTYBj0I4oXyywrpW 200 5177.724 ms - 26

h:\myapp\coep_updates\node_modules\email-verification\node_modules\nodemailer\node_modules\nodemailer-smtp-transport\src\smtp-transport.js:136
return callback(null, info);
^

TypeError: callback is not a function
at h:\myapp\coep_updates\node_modules\email-verification\node_modules\nodemailer\node_modules\nodemailer-smtp-transport\src\smtp-transport.js:136:20
at h:\myapp\coep_updates\node_modules\email-verification\node_modules\nodemailer\node_modules\nodemailer-smtp-transport\node_modules\smtp-connection\src\smtp-connection.js:279:20
at SMTPConnection._actionStream (h:\myapp\coep_updates\node_modules\email-verification\node_modules\nodemailer\node_modules\nodemailer-smtp-transport\node_modules\smtp-connection\src\smtp-connection.js:966:16)
at SMTPConnection.<anonymous> (h:\myapp\coep_updates\node_modules\email-verification\node_modules\nodemailer\node_modules\nodemailer-smtp-transport\node_modules\smtp-connection\src\smtp-connection.js:594:14)
at SMTPConnection._processResponse (h:\myapp\coep_updates\node_modules\email-verification\node_modules\nodemailer\node_modules\nodemailer-smtp-transport\node_modules\smtp-connection\src\smtp-connection.js:516:16)
at SMTPConnection._onData (h:\myapp\coep_updates\node_modules\email-verification\node_modules\nodemailer\node_modules\nodemailer-smtp-transport\node_modules\smtp-connection\src\smtp-connection.js:353:10)
at emitOne (events.js:77:13)
at TLSSocket.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:153:18)
at TLSSocket.Readable.push (_stream_readable.js:111:10)
at TLSWrap.onread (net.js:531:20)

Process finished with exit code 1

直到服务器崩溃,一切正常。我收到所有电子邮件和回复都是正确发送的,我甚至在浏览器上看到了JSON响应{“email”:“user_confirmed”}。唯一的问题是服务器事后崩溃了。

编辑1

我尝试添加return语句 - 仍然是同样的问题。我在这里添加了它们 -

return res.json({
                'email': 'user_confirmed'
            });

我也尝试添加一个返回 -

res.json({
            'email': 'user_confirmed'
        });
return;

直到现在都没有运气......

编辑2

确定。所以这实际上是GitHUB上的一个悬而未决的问题,据报道这是一个错误。

https://github.com/whitef0x0/node-email-verification/issues/44

2 个答案:

答案 0 :(得分:2)

所以,我用这种方式尝试了GitHUB解决方案,它现在正在完美运行,即使官方修复没有发布......

在模块的源文件夹中,在文件&#39; index.js&#39; - &GT;

Go to line 340 -- 

你会看到这一行

callback = options.shouldSendConfirmation;

将其更改为 - &gt;

callback = function(){};

希望这会有所帮助......

答案 1 :(得分:0)

您可以更改nev.sendConfirmationEmail方法以将回调包含为第三个参数:

nev.sendConfirmationEmail(user.email, function(err, info) {
    if (err) {
        console.log('sending_conf_email_failed');
        return res.json({'email': 'sending_conf_email_failed'});
    }

    console.log('user_confirmed');
    res.json({
        'email': 'user_confirmed'
    });

    console.log('Done, and confirmed');
}, function(){});