2017-09-20 8 views
0

이메일을 성공적으로 보낸 후에 요청을 취소 할 수 없습니다. 이메일을 보낸 후 어떻게 제대로 돌아올 수 있습니까? 이것은 콜백 지옥 일지 모르지만, 나는 그것을 해결하는 방법을 알 수 없다.특급 콜백 지옥에 갇혀있다

다른 부분에 약간의 반품을 시도했지만 작동하지 않았습니다.

+0

당신은'emailExistence.check'에서 db 체크를 어떻게합니까 ?? –

+0

@ iam-batman, 이메일이 있는지 여부를 확인합니다 (이메일이 존재하면 [이메일 유효성 있음], 이메일이 존재하지 않으면 res는 거짓). 제대로 작동하고 전자 메일이 존재하지 않으면 오류가 발생합니다. 그러나 문제는 이메일이 성공적으로 전송 된 경우입니다. 요청이 끝나지 않습니다. – Ashkan

+0

메일을 보낸 후'info'를 기록 할 수 있습니까? –

답변

2

성공적으로 전송할 때 응답 필드를 설정했으면 next()를 마지막 단계로 호출하여 다음 미들웨어가 요청을 받고 응답을 되돌려 보내십시오. 그래서 기본적으로 :

... 
res.json(yourResponse); 
next(); 
... 

또는, 이번이 마지막 미들웨어 인 경우, 클라이언트로 응답을 보내

res.send(yourResponse); 
0

나는이 방법으로 그것을 해결했다. emailExistence는 약속을 사용하지 못하게 했으므로 이메일 대신에 ckeck을 사용했습니다 :

const router  = require('express').Router(); 
const nodemailer = require('nodemailer'); 
const emailExistence= require('email-existence'); 
var emailCheck  = require('email-check'); 

module.exports = router; 

router.post('/forgetPass', (req, res, next) => { 
    if(!req.body.email){ 
     next(new Error("Email is required.")); 
     return; 
    } 

    // Check the req.body.email with email pattern regex 
    var patt = new RegExp (process.env.EMAIL_PATTERN__REGEX), 
     isEmail = patt.test(req.body.email);  

    if(!isEmail){ 
     next(new Error("The email does'nt seem to be a valid email. If you are sure about your email validity contact the website admin.")); 
     return; 
    } 

    return emailCheck(req.body.email) 
     .then(function(result){ 
      let transporter = nodemailer.createTransport({ 
       service: 'gmail', 
       auth: { 
        user: process.env.EMAIL, 
        pass: process.env.EMAILPASSWORD 
       } 
      }); 

      let mailOptions = { 
       from:  process.env.EMAIL, 
       to:   req.body.email, 
       subject: 'Link for setting a new password', 
       html:  'Set a new password from <a href="http://www.example.com/newpass">this link</a>.'  
      }; 

      return transporter.sendMail(mailOptions) 
       .then(function (result2) { 
          res.status(200).json(Object.assign(req.base, { 
           message: "The email has been sent successfully.", 
           data: null 
          })); 
          return; 
         }, 
         function(error2){ 
          next(new Error("Error in sending email.")); 
           return; 
         }); 
     }, 
     function(error) { 
      next(new Error("The email does'nt seem to be a valid email. If you are sure about your email validity contact the website admin.")); 
      return; 
     }); 
});