2017-09-13 7 views
0

新しいリソースを作成した後にメールを送信しようとしました。新しいユーザーを作成する前に、メールと従業員番号をチェックする必要がありますすでに存在していると表示するか、新しいリソースを追加してメールを送信する必要があります。ノードメーラーエラー:送信後にヘッダーを設定できない

電子メールとempが同じでない場合、そのリソースが完全に作成され、メールが送信されます。

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) 

マイトランスミッター:

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

マイコード:

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

     }); 
    } 
    }); 
}); 

答えて

1

問題が発生している私は、同じメールまたはEMP番号を試みた場合でも、エラー

私のエラーを取得していますあなたのif else条件の欠陥によって。他の試合

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

かのときに最初の文は、同様に一致するかどうか。 res.redirectが2回トリガーされます。

if/else条件を調整して、重複がないことを確認してください。

+0

返信ありがとうございます...私は電子メールと従業員番号がすでに存在しているので、フラッシュメッセージを表示するためにその条件を使用しました。変更された場合、それは – Vishnu

+0

が&& user.res_empno!= req.bodyをどのように表示できるかを意味します。 res_empnoを第2の条件にする。 && user.res_email!= req.body.res_emailを最後の条件に追加してください – spiritwalker

+0

ありがとうございました。また、If(User)のエラーを修正しました。 – Vishnu

関連する問題