2017-09-13 2 views
0

J'ai essayé d'envoyer un mail une fois qu'une nouvelle ressource a été créée, Et Avant de créer un nouvel utilisateur, il doit vérifier le courrier électronique et le numéro d'employé si l'une des valeurs affichage existe déjà ou il va ajouter une nouvelle ressource et doit envoyer un mail.Node mailer Erreur: impossible de définir les en-têtes après leur envoi

Si l'email et l'emp non ne sont pas identiques, c'est Parfaitement créé la ressource et l'envoi du courrier. Mais si je l'ai essayé même mail ou votre numéro emp am obtenir erreur

Mon erreur:

events.js:182 
     throw er; // Unhandled 'error' event 
    ^

Error: Can't set headers after they are sent. 
    at validateHeader (_http_outgoing.js:489:11) 
    at ServerResponse.setHeader (_http_outgoing.js:496:3) 
    at ServerResponse.header (D:\hourmint\node_modules\express\lib\response.js:7 
30:10) 
    at ServerResponse.location (D:\hourmint\node_modules\express\lib\response.js 
:847:15) 
    at ServerResponse.redirect (D:\hourmint\node_modules\express\lib\response.js 
:885:18) 
    at D:\hourmint\app\routes.js:298:18 
    at D:\hourmint\node_modules\mongoose\lib\query.js:2917:18 
    at <anonymous> 
    at process._tickCallback (internal/process/next_tick.js:188:7) 

Mon émetteur:

var smtpTransport = nodemailer.createTransport({ 
    service: 'Gmail', 
    auth: { 
    user: '[email protected]', 
    pass: 'mypassword' 
    }, 
}); 

Mon code:

app.post('/addresources', isLoggedIn, function(req, res) { 
    var id = (req.body._id) ? req.body._id : mongoose.Types.ObjectId(0); 
    var newPwd = new mongo.resource(); 

    var pwd = newPwd.generateHash(req.body.res_password); 
    var resourceValue = { 
    'role_id': req.body.role_id, 
    'privilege_id': req.body.privilege_id, 
    'res_fname': req.body.res_fname, 
    'res_lname': req.body.res_lname, 
    'res_email': req.body.res_email, 
    'res_password': pwd, 
    'res_empno': req.body.res_empno, 
    'res_city': req.body.res_city, 
    'res_mobile': req.body.res_mobile, 
    'res_emerno': req.body.res_emerno, 
    'res_hourlyrate': req.body.res_hourlyrate, 
    'res_otp': 0, 
    'res_status': req.body.res_status 
    }; 

    mongo.resource.findOne({ 
    $or: [{ 
     'res_email': req.body.res_email 
    }, { 
     'res_empno': req.body.res_empno 
    }] 
    }).exec(function(err, user) { 
    if (err) throw err; 
    if (user) { 
     console.log(user) 
     if (user.res_email == req.body.res_email && user.res_empno == req.body.res_empno) { 

     req.flash('error', 'Email And Employee Number Already Exists!!!') 
     res.redirect('/resources') 


     } //user already exists with email AND/OR phone. 
     else if (user.res_email == req.body.res_email) { 

     req.flash('error', 'Email Id Already Exists!!!') 
     res.redirect('/resources') 


     } //no users with that email NOR phone exist. 
     else(user.res_empno == req.body.res_empno) { 

     req.flash('error', 'Employee Number Already Exists!!!') 
     res.redirect('/resources') 

     } 
    } else { 


     mongo.resource.findOneAndUpdate({ 
     '_id': id 
     }, resourceValue, { 
     upsert: true, 
     new: true 
     }, function(err, response) { 
     if (err) throw err; 


     console.log("Resource Added SuccessFully") 
     console.log(response.res_email) 
     res.redirect('/resources') 

     var mainOptions = { 
      from: '"Niyati" <[email protected]>', 
      to: response.res_email, 
      subject: 'Hello ✔', // Subject line 
      text: 'Hello world ?', // plaintext body 
      html: '<b>Hello world ?</b>' // html body 
     }; 
     //console.log("html data ======================>", mainOptions.html); 
     smtpTransport.sendMail(mainOptions, function(err, info) { 
      if (err) throw err; 
      console.log("mail Sent"); 
      // console.log(err); 
     }); 

     }); 
    } 
    }); 
}); 

Répondre

1

le problème est dû à par un défaut dans votre condition d'if else. lorsque le premier cas correspond

user.res_email == req.body.res_email && user.res_empno == req.body.res_empno

l'instruction else if correspondra aussi bien. donc res.redirect est déclenché deux fois.

Veuillez affiner votre condition if/else pour vous assurer qu'il n'y a pas de chevauchement.

+0

Merci d'avoir utilisé cette condition pour afficher un message flash comme Email et numéro d'employé existe déjà, si Changé, cela signifie que je peux montrer que – Vishnu

+0

ajouter && user.res_empno! = Req.body. res_empno à la deuxième condition; add && user.res_email! = req.body.res_email à la dernière condition – spiritwalker

+0

Merci J'ai corrigé l'erreur et aussi en dernière condition dans If (User) Je l'ai changé pour else – Vishnu