2016-03-21 3 views
1

Здесь я отправляю почту при отправке формы. Все работает нормально, единственная проблема - даже если почта не отправляется из-за неправильной аутентификации или проблемы с Интернетом, пользователь получает сообщение об успешном завершении. Я хочу, чтобы пользователь получил сообщение об ошибке, если почта не была отправлена.Невозможно отправить ответ об ошибке nodemailer от node.js до angular.js

клиент

this.mail= function() { 
    var data = ({ 
     name :this.name, 
     email :this.email 

    }) 

    //Post Request 
     $http({ 
    method: 'POST', 
    url: '/contact2', data 
}).then(function successCallback(response) { 
    $mdToast.show(

        $mdToast.simple() 
        .textContent('Thanks for your message '+data.name) 
        .position($scope.getToastPosition()) 
        .hideDelay(5000) 
       ); 
    }, function errorCallback(response) { 
    $mdToast.show(
      $mdToast.simple() 
       .textContent('Something went wrong, Please TRY AGAIN '+data.name) 
       .position($scope.getToastPosition()) 
       .hideDelay(5000) 
      ); 
    }); 

    }); 

сервер

function send(req, res) { 
    console.log(req.body); 

    var data= req.body 
    smtpTransport.sendMail({ 
    from: "<[email protected]>", 
    to: data.email, 
    subject: "Website Submission from "+data.name, 
    text: 'You have a new submission with the following details..., 
    }, function(error, response){ //callback 
    if(error){ 
     console.log(error); 
    }if{ 
     console.log(" Message sent "+data.name); 
    } 

    smtpTransport.close(); 
    }); 
    res.json(data); 
} 
+0

Ошибка синтаксиса в обратном вызове, вы используете 'if {', пожалуйста, см. Мой ответ, чтобы исправить это. –

ответ

4

сервера: Вы можете создать и отправить сообщение об ошибке с сервера, как

if(error){ 
    res.json({ 
     Status : false, 
     message : error 
    }) 
}else{ 
    res.json({ Status : true, 
    message : 'Success' 
    }) 
} 

Клиент: Здесь вы можете захватить его

function successCallback(response) { 
if(response.Status){ 
    console.log(response.message); 
}// for success 
else{ 
    console.log(response.message) 
} //for error 

}

+0

На стороне клиента я не могу console.log response.message и response.Status .... Он показывает мне undefined –

1

Вы можете установить и отправить дополнительные data.emailSent = true или data.emailSent = false как:

if(error){ 
     data.emailSent = false; 
} else{ 
     data.emailSent = true; 
} 

На клиенте вы можете проверить этот флаг и соответственно показать успех или неудачу.

+0

спасибо за помощь ур, я думал сделать что-то подобное, если (ошибка) {res.json ({message: 'error'})}. Как получить эту переменную на стороне клиента –

+0

То же самое, что я предложил, сделать так или иначе. Вы можете получить доступ к этой переменной на клиенте как 'response.message', пожалуйста, отметьте ответ правильно, если это вам поможет. –

1

Спасибо Zeeshan Хасан и пуджу за помощь меня сначала не удалось получить доступ к статусу и сообщению. Я просто внес эти изменения в решение Pooja и его работу

function successCallback(response) { 
     console.log(response.data.Status); 
     if (response.data.Status){console.log(response.data.message);} 
`  `else{ console.log(response.data.message) } 
+0

Это не работает со мной. Он открывает только пустую страницу с {«Статус»: true, «message»: «Success»}. – nolags

Смежные вопросы