2017-09-13 6 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가 두 번 트리거됩니다.

겹치는 부분이 없는지 확인하기 위해 if/else 조건을 수정하십시오.

+0

답장을 보내 주셔서 ... 회신을 보내 주셔서 감사합니다. 전자 메일과 직원 번호가 이미 존재하므로 플래시 메시지를 표시했습니다. 변경된 경우, – Vishnu

+0

에 && user.res_empno! = req.body를 추가 할 수 있습니다. res_empno를 두 번째 조건으로; && user.res_email! = req.body.res_email을 마지막 상태 인 – spiritwalker

+0

에 추가하십시오. 오류 (또한 사용자)가 다른 것으로 변경된 경우 오류 및 최종 절도 조건이 수정되었습니다. if – Vishnu