이메일을 성공적으로 보낸 후에 요청을 취소 할 수 없습니다. 이메일을 보낸 후 어떻게 제대로 돌아올 수 있습니까? 이것은 콜백 지옥 일지 모르지만, 나는 그것을 해결하는 방법을 알 수 없다.특급 콜백 지옥에 갇혀있다
다른 부분에 약간의 반품을 시도했지만 작동하지 않았습니다.
이메일을 성공적으로 보낸 후에 요청을 취소 할 수 없습니다. 이메일을 보낸 후 어떻게 제대로 돌아올 수 있습니까? 이것은 콜백 지옥 일지 모르지만, 나는 그것을 해결하는 방법을 알 수 없다.특급 콜백 지옥에 갇혀있다
다른 부분에 약간의 반품을 시도했지만 작동하지 않았습니다.
성공적으로 전송할 때 응답 필드를 설정했으면 next()를 마지막 단계로 호출하여 다음 미들웨어가 요청을 받고 응답을 되돌려 보내십시오. 그래서 기본적으로 :
...
res.json(yourResponse);
next();
...
또는, 이번이 마지막 미들웨어 인 경우, 클라이언트로 응답을 보내
res.send(yourResponse);
나는이 방법으로 그것을 해결했다. 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;
});
});
당신은'emailExistence.check'에서 db 체크를 어떻게합니까 ?? –
@ iam-batman, 이메일이 있는지 여부를 확인합니다 (이메일이 존재하면 [이메일 유효성 있음], 이메일이 존재하지 않으면 res는 거짓). 제대로 작동하고 전자 메일이 존재하지 않으면 오류가 발생합니다. 그러나 문제는 이메일이 성공적으로 전송 된 경우입니다. 요청이 끝나지 않습니다. – Ashkan
메일을 보낸 후'info'를 기록 할 수 있습니까? –