我正在尝试在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
答案 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(){});