2017-10-13 2 views
0

Ist es möglich, einen Fund in einem Fund auf Knoten mit Mongoose zu finden?Mongoose.js find() in einem find()

Ich lasse ein Benutzer ihre E-Mail-Adresse ändern, aber ich muss sicherstellen, dass die E-Mail von einem anderen Benutzer nicht, bevor ich die neue E-Mail zu speichern benutzt hat.

ich dies tun wollen:

/************************************************************* 
* MY_USER - PROFILE UPDATE 
*************************************************************/ 
app.put('/api/myuser/info', auth, function(req, res) { 
    serverLog.log(req, production, {}); 

    // User ID 
    var myUserID = req.session.passport.user._id; 

    if (myUserID && validateID(myUserID)) { 

    User.findOne({ 
     _id: myUserID 
    }, function(err, data) { 
     if (err) throw err; 

     if (data == null) { 
      res.sendStatus(401); 
      console.log(401); 
     } 
     // Data 
     else { 

      // Update Email 
      if (req.body.email) { 

       // Check valid email 
       if (validateEmail(req.body.email)) { 
       console.log('validateEmail'); 

       // Check Unique Email 
       User.findOne({ 
        'local.user.info.email': email 
       }, function(err, user) { 

        if(err) return err; 

        if (user) { 
         // Email already in use 
         res.status(400).send('ERROR: Email Already in Use'); 
         return; 
        } 
        console.log('uniqueEmail ' + true); 
        // Update email 
        user.local.user.info.email = req.body.email; 
       }) 

       } 
       // Bad Email 
       else { 
       res.status(400).send('ERROR: Not a propper Email'); 
       return; 
       } 

      } 

      // SAVE USER DATA    
      if (info_sent) { 

       user.save(function(err, data) { 
       if (err) throw err; 

       res.setHeader('Content-Type', 'application/json'); 
       res.status(200).send(JSON.stringify(data.local.user.info, null, 3)); 
       return; 
       }); 
      } 
      // NO INFO WAS SENT 
      else { 
       res.status(400).send('ERROR: No information was sent.'); 
       return; 
      } 
     } 
    }); 
    } 
    // Bad/No User ID 
    else { 
    res.sendStatus(401); 
    } 
}); 

ich den Benutzer zu finden, dann überprüfen, ob E-Mail in Gebrauch Wie würde man über das tun dies gehen?

+0

So, wie es geht? Hat dein Code funktioniert? – msagala25

+0

Mögliche Duplikat [Mungo & unique Feld] (https://stackoverflow.com/questions/21971666/mongoose-unique-field) –

+0

Dies scheint ein Duplikat zu sein: https://stackoverflow.com/questions/21971666/mongoose -unique-field –

Antwort

0

Das funktioniert nicht, weil Sie Ihre Benutzer nicht in der Callback-Funktion speichern, die bereits vor, wenn E-Mail überprüft existiert. Sehen Sie sich auch Versprechen zu vermeiden Rückruf Hölle

Wie auch immer, können Sie es wie folgt tun:

// Check Unique Email 
User.findOne({'local.user.info.email': email }, (err, user) => { 
    if (err) throw err; 
    if (user) { 
    return res.status(400).send('ERROR: Email Already in Use'); 
    } else { // SAVE USER DATA   
    if (info_sent) { 
    user.save((err, data) => { 
     if (err) throw err; 
     res.setHeader('Content-Type', 'application/json'); 
     return res.status(200).send(JSON.stringify(data.local.user.info, null, 3)); 
     }); 
    } else { 
     return res.status(400).send('ERROR: No information was sent.'); 
    } 
}