Javascript 尝试使用nodeEmailer在nodejs中设置密码恢复

Javascript 尝试使用nodeEmailer在nodejs中设置密码恢复,javascript,node.js,express,nodemailer,mern,Javascript,Node.js,Express,Nodemailer,Mern,尝试使用NodeEmailer在我的nodejs项目中设置密码恢复。我遇到“未定义收件人”错误。如何修复代码 这是我的密码: app.post('/forgotpass', (req, res, next)=> { let recoveryPassword = ''; async.waterfall([ (done) => { crypto.randomBytes(20, (err , buf) => {

尝试使用NodeEmailer在我的nodejs项目中设置密码恢复。我遇到“未定义收件人”错误。如何修复代码

这是我的密码:

app.post('/forgotpass', (req, res, next)=> {
    let recoveryPassword = '';
   async.waterfall([
        (done) => {
            crypto.randomBytes(20, (err , buf) => {
                let token = buf.toString('hex');
                done(err, token);
            });
        },
        (token, done) => {
            User.findOne({username : req.body.username})
                .then(user => {
                    if(!user) {
                        console.log("user does not exists");
                        return res.redirect('/forgotpass');
                    }

                    user.resetPasswordToken = token;
                    user.resetPasswordExpires = Date.now() + 1800000; //   1/2 hours

                    user.save(err => {
                        done(err, token, user);
                    });
                });

        },
        (token, user) => {
            let smtpTransport = nodemailer.createTransport({
                            host: 'smtp.gmail.com',
                            port: 465,
                            auth: {
                                user: 'test@gmail.com',
                                pass: 'testpass'
                            }
            });

            let mailOptions = {
                to: user.email,
                from : 'Ghulam Abbas myapkforest@gmail.com',
                subject : 'Recovery Email from Auth Project',
                text : 'Please click the following link to recover your passoword: \n\n'+
                        'http://'+ req.headers.host +'/reset/'+token+'\n\n'+
                        'If you did not request this, please ignore this email.'
            };
            smtpTransport.sendMail(mailOptions, err=> {
                console.log(err);
                res.redirect('/forgotpass');
            });
                        
        }

    ], err => {
        if(err) res.redirect('/forgotpass');
                if (err )console.log(err);
    });
});
下面是我得到的错误:

Error: No recipients defined
at SMTPConnection._formatError (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:784:19)
at SMTPConnection._setEnvelope (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:995:34)
at SMTPConnection.send (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:615:14)
at sendMessage (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-transport\index.js:227:28)
at C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-transport\index.js:285:25
at SMTPConnection._actionAUTHComplete (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:1537:9)
at SMTPConnection.<anonymous> (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:550:26)
at SMTPConnection._processResponse (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:942:20)
at SMTPConnection._onData (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:749:14)
at TLSSocket.SMTPConnection._onSocketData (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:195:44)
at TLSSocket.emit (events.js:310:20)
at addChunk (_stream_readable.js:286:12)
at readableAddChunk (_stream_readable.js:268:9)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23)  {
    code: 'EENVELOPE',
    command: 'API'
      }
错误:未定义收件人
在SMTPConnection上。\u格式错误(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp connection\index.js:784:19)
在SMTPConnection.\u setEnvelope(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp连接\index.js:995:34)
在SMTPConnection.send(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp连接\index.js:615:14)
在sendMessage(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp传输\index.js:227:28)
在C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp传输\index.js:285:25
在SMTPConnection.\u actionAUTHComplete(C:\Users\JITHENDRA\Desktop\project\node\Secrets start Code\node\u modules\nodemailer\lib\smtp connection\index.js:1537:9)
在SMTP连接处。(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp连接\index.js:550:26)
在SMTPConnection.\u processResponse(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp connection\index.js:942:20)
在SMTPConnection.\u onData(C:\Users\JITHENDRA\Desktop\project\node\Secrets start Code\node\u modules\nodemailer\lib\smtp connection\index.js:749:14)
在TLSSocket.SMTPConnection.\u onSocketData(C:\Users\JITHENDRA\Desktop\project\node\Secrets start Code\node\modules\nodemailer\lib\smtp connection\index.js:195:44)
在TLSSocket.emit(events.js:310:20)
在addChunk(_stream_readable.js:286:12)
在readableAddChunk(_stream_readable.js:268:9)
在TLSSocket.Readable.push(_stream_Readable.js:209:10)
在TLSWrap.onStreamRead(internal/stream_base_commons.js:186:23){
代码:“eDevelope”,
命令:“API”
}
这就是我的错误。请修复代码
我只希望节点邮件程序在验证用户是否存在后发送邮件

此错误意味着您没有传递
mailpoptions.to
值,因此
user.email
值为空或不是有效的电子邮件地址。如果使用
async/await
,则可以更简洁地编写代码,并避免使用
async.fallet
,从而更易于调试。下面指出了一些更改/打字错误-

// define transport here, outside the handler
const smtpTransport = nodemailer.createTransport({
  host: 'smtp.gmail.com',
  port: 465,
  auth: {
      user: 'test@gmail.com',
      pass: 'testpass'
  }
});

// use async function as the handler
app.post('/forgotpass', async (req, res) => {
  try {
    const user = await User.findOne({username : req.body.username});
  
    if (!user) {
      console.log("user does not exists");
      return res.redirect('/forgotpass');
    }
    // make sure you have a valid email here
    console.log(`Sending email to ${user.email}`);
  
    // get token here once we have a valid user
    const token = crypto.randomBytes(20);
  
    // update the user with the token
    user.resetPasswordToken = token;
    user.resetPasswordExpires = Date.now() + 1800000; //   1/2 hours
    await user.save();
  
    // send the email
    await smtpTransport.sendMail({
      to: user.email,
      from : 'Ghulam Abbas <myapkforest@gmail.com>', // <-- wrap email address in <>
      subject : 'Recovery Email from Auth Project',
      text : 'Please click the following link to recover your passoword: \n\n'+ // <-- typo: "passoword" should be "password"
      'http://'+ req.headers.host +'/reset/'+token+'\n\n'+ // <-- use HTTPS!
      'If you did not request this, please ignore this email.'
    });
  } catch (err) {
    // catch all exceptions here...
    console.log(err);
  }

  // everything redirects to the GET handler for forgotpass
  return res.redirect('/forgotpass');
});
//在处理程序之外的此处定义传输
const smtpTransport=nodemailer.createTransport({
主机:“smtp.gmail.com”,
港口:465,
认证:{
用户:'test@gmail.com',
通过:“测试通过”
}
});
//使用异步函数作为处理程序
app.post('/forgotpass',异步(请求、回复)=>{
试一试{
const user=wait user.findOne({username:req.body.username});
如果(!用户){
console.log(“用户不存在”);
返回res.redirect('/forgotpass');
}
//确保您在此处有有效的电子邮件
log(`Sending email to${user.email}`);
//一旦我们有了一个有效的用户,就在这里获取令牌
常量令牌=加密随机字节(20);
//使用令牌更新用户
user.resetPasswordToken=令牌;
user.resetPasswordExpires=Date.now()+1800000;//1/2小时
等待user.save();
//发送电子邮件
等待smtpTransport.sendMail({
致:user.email,

from:'Ghulam Abbas',//这行代码
from:'Ghulam Abbas'myapkforest@gmail.com“
格式不正确。电子邮件周围应该有括号,如:
'Ghulam Abbas'