Ich habe einen Code geschrieben, um Mail zu senden, wenn die Kunden registrieren werden. Sobald sie registriert sind, erhalten sie eine E-Mail und der Code zum Senden von E-Mails ist wie folgt.Ich bin nicht in der Lage, mein Dokument in der Datenbank mit meinem Code zu aktualisieren, aber ich kann es in der Datenbank explizit tun
Dies ist mein Controller
module.exports = (function(){
return {
newRegister: function(request,response){
var registers = new register(request.body);
registers.save(function(error,result){
if(error){
response.send(error)
console.log(error)
}
else{
response.json(result)
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "[email protected]",
pass: "*******"
}
});
// setup e-mail data with unicode symbols
var mailOptions = {
from: "[email protected]", // sender address
to: result.email, // list of receivers
subject: "Hello", // Subject line
//text: "Hello world ✔", // plaintext body
html: "<!DOCTYPE html><html lang='en'><head><script type='text/javascript'></script></head><body><p style=font-family:'Times New Roman'>Please click the below link for verification</p><p style=font-family:'Times New Roman'><a href='http://127.0.0.1:3060/email/:id'>Click Here</a></p></body></html>"
}
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, function(error, response){
console.log("Message inside auth: ");
if(error){
console.log(error);
}else{
console.log("Message sent: " + response.message);
}
// if you don't want to use this transport object anymore, uncomment following line
//smtpTransport.close(); // shut down the connection pool, no more messages
});
}
})
}
}
})();
Dies ist die Update-Methode, die ich geschrieben habe, zu aktualisieren, wenn der Link angeklickt wird.
changeStatus: function(request, response){
register.findOneAndUpdate({"email": request.params.id}, {$set: {"status": true}}, {returnNewDocument: true}, function(error,result){
if(error){
response.send(error)
console.log(error)
}
else{
response.json(result)
console.log(result)
}
})
}
Und dies ist mein Weg
app.get('/email/:id', function(request,response){
registercontroller.changeStatus(request,response)
response.send("User activated")
})
, wenn der Link Ich erhalte die Ausgabe als
User activated
null
geklickt wird Ich bin nicht finden können, wo ich schief gelaufen ist.
In Ihrer Route app.get rufen Sie registercontroller.changeStatus und innerhalb dieser Funktion rufen Sie entweder response.send oder json, aber Sie rufen auch response.send von der Route, ich bin ziemlich sicher, dass Sie eine Fehlermeldung erhalten sollten, die etwas wie * "Header können nicht gesendet werden, bereits gesendet" * Sie können response.send nicht zweimal aufrufen, dies führt immer zu einem Fehler. – Molda
Molda, ich habe response.send() von der Route entfernt, immer noch bekomme ich null als Ausgabe –
Und woher kommt diese Null? Ich meine, ist es auf Server oder Client und was erwartest du es zu sein? Auch was ist die Ausgabe von console.log (Ergebnis); in register.findOneAndUpdate? – Molda