2016-06-03 5 views
1

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.

+0

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

+0

Molda, ich habe response.send() von der Route entfernt, immer noch bekomme ich null als Ausgabe –

+0

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

Antwort

0

Ihre Funktion sollte wie folgt aussehen: -

changeStatus: function(request, response) 
{ 
    register.findOneAndUpdate({"email": request.params.id}, 
          {$set: {"status": true}}, 
          {new: true},//Made changes here. 
    function(error,result) 
    { 
     if(error) 
     { 
      response.send(error) 
      console.log(error) 
     } 
     else 
     { 
      response.json(result) 
      console.log(result) 
     } 
    }) 
} 

Verwenden new : true in der Abfrage, den modifizierten Datensatz zu erhalten. Weitere Informationen zur Verwendung finden Sie unter doc.

Hoffe, das wird helfen.

+0

titi23, ich habe versucht, aber immer noch bekomme ich Null –

+0

können Sie versuchen, finden Sie für '({" email ": request.params.id})' Abfrage und sagen, gibt es irgendein Ergebnis oder nicht? – Shrabanee

+0

Ich habe versucht, Null-Array wie folgt zu bekommen [] –

Verwandte Themen