NodeJS:callback不是一个函数 – 电子邮件validation

我试图实现一个用户注册系统,在Android与节点作为我的后端服务器。

我在本地主机上使用Node 4.4.5,并使用“email-verification”包 – https://www.npmjs.com/package/email-verification

所以根据android的请求,发送一个validation链接的确认电子邮件,这是正常工作。

点击链接时,会发出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解决scheme,它现在正在完美地工作,即使官方修复没有发布…

在模块的源文件夹中,在文件“index.js” – >中

 Go to line 340 -- 

你会看到这一行

 callback = options.shouldSendConfirmation; 

将其更改为 – >

 callback = function(){}; 

希望这可以帮助…

你可以改变你的nev.sendConfirmationEmail方法来包含callback作为第三个参数:

 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(){});