2017-11-30 4 views
0

innerhalb meiner Benutzerroute.Fehler beim Speichern von Mungo-Daten

var User = require('../models/user'); 
 

 
router.route('/verify') 
 
.get((req, res) => { 
 
    res.render('verify'); 
 
}) 
 
.post((req, res, next) => { 
 
    
 
     const {secretToken} = req.body; 
 
     const user = User.findOne({'secretToken' : secretToken}); 
 
     if(!user) 
 
     { 
 
      req.flash('error_msg', 'No user found'); 
 
      res.redirect('/users/verify'); 
 
      return; 
 
     } 
 
    
 
     user.active = true; 
 
     user.secretToken = ''; 
 
     user.save(); 
 
     
 
     
 
     
 
    
 
     req.flash('success_msg','Thank you.You can now login'); 
 
     res.redirect('/users/login'); 
 

 
     
 

 
    
 
    
 
});

Das ist mein Modell

var userSchema = new mongoose.Schema({ 
 
    username : { 
 
     type : String, 
 
     index : true 
 
    }, 
 
    password : { 
 
     type : String 
 
    }, 
 
    email : { 
 
     type : String, 
 
     unique : true 
 
    }, 
 
    password : { 
 
     type : String 
 
    }, 
 
    secretToken : 
 
    { 
 
     type : String 
 
    }, 
 
    active : { 
 
     type : Boolean 
 
    } 
 
}); 
 

 
var User = module.exports = mongoose.model('User', userSchema);

Ich habe eine Route überprüfen, wo ein Benutzer seine/ihre secretToken veröffentlichen wird, und wenn die secretToken Spiel mit Datenbank dann wird das secretToken auf null gesetzt und mein boolesches Element wird b Wahre von false.So zuerst nehme ich das geheime Token aus der Datenbank, dann überprüfe ich es mit der, die Benutzer geben, wenn übereinstimmen, dann bin ich mein secretToken und aktiv, aber Problem ist ich cnt speichern es.Es zeigt mir dies Error.

Typeerror: user.save ist keine Funktion

Mein Problem nicht bei der Schaffung von Benutzer ist, es geht um die Informationen von bereits angelegten Benutzer zu aktualisieren.

+0

Mögliches Duplikat von [.save() ist kein Funktion Mungo] (https://stackoverflow.com/questions/37532275/save-is-not-a-function-mongoose) –

Antwort

1

Das Problem ist hier:

const user = User.findOne({'secretToken' : secretToken}); 

FindOne gibt ein Mungo Versprechen, die Sie nicht erwarten. Sie erwarten wahrscheinlich, das Dokument zu haben, wenn Sie user.save() anrufen, aber das ist nicht der Fall. Sie müssen nur auf die findOne() warten und dann sollten Sie .save() auf diesem Dokument aufrufen können.

+0

Meine Knotenversion ist 6.11.2 die async nicht unterstützen. –

+0

Sie müssen nicht async/erwarten, es ist nur syntatic Zucker für Versprechungen. Sie können einfach then() verwenden, um auch auf das Versprechen zu warten. – kentor

1

Was würde ich Ihnen vorschlagen zu tun ist:

var User = require('../models/user'); 

router.route('/verify') 
    .get((req, res) => { 
     res.render('verify'); 
    }) 
    .post((req, res, next) => { 

     const { 
      secretToken 
     } = req.body; 
     User.findOne({ 
      'secretToken': secretToken 
     }, (user) => { 
      if (!user) { 
       req.flash('error_msg', 'No user found'); 
       res.redirect('/users/verify'); 
       return; 
      } 

      user.active = true; 
      user.secretToken = ''; 
      user.save(); 
      req.flash('success_msg', 'Thank you.You can now login'); 
      res.redirect('/users/login'); 
     }); 
    }); 

habe ich einen Rückruf hier, Sie auch Versprechen nutzen könnten und dann asynchrones versuchen Funktionen erwarten babel verwenden, aber das funktioniert für mich.

Verwandte Themen