【问题标题】:NodeJS: Callback is not a function - Email verificationNodeJS:回调不是函数 - 电子邮件验证
【发布时间】:2016-07-05 21:37:05
【问题描述】:

我正在尝试在 android 上实现一个用户注册系统,并将 node 作为我的后端服务器。

我在 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 res.json({
                'email': 'user_confirmed'
            });

我也尝试添加一个返回--

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

到目前为止还没有运气......

编辑 2

好的。所以这实际上是 GitHub 上的一个未解决问题,这被报告为一个错误。

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

【问题讨论】:

  • 我也有同样的问题..我无法解决github中提到的问题..你能告诉我第340行所在的文件吗变了吗?
  • 同样的问题@Parag Verma,即使通过 github 解决方案也无法解决.....如果您能提供帮助,那就太好了。谢谢
  • @kRAk3N 请看我的回答
  • 谢谢.. 成功了

标签: android node.js mongodb email express


【解决方案1】:

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

在模块的源文件夹中,在文件'index.js'中-->

Go to line 340 -- 

你会看到这条线

callback = options.shouldSendConfirmation;

改为-->

callback = function(){};

希望这会有所帮助...

【讨论】:

  • 它有效,但现在我收到了两倍的确认电子邮件
【解决方案2】:

您可以更改您的 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(){});

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 2015-11-02
    • 2014-03-03
    • 2021-10-21
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多