2017-10-13 15 views
0

MongooseでNode内のfind内でfindを実行することはできますか?find()内のMongoose.js find()

私は、ユーザーに電子メールアドレスを変更させるが、新しい電子メールを保存する前に他のユーザーが電子メールを使用していないことを確認する必要がある。

私はこれをしたい:

/************************************************************* 
* 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); 
    } 
}); 

私は、ユーザーを見つけ、その後、電子メールは1がこれを行うに行くかどう利用 であるかどうかを確認?

+0

:またとにかくコールバック地獄

を避けるために約束を使用することを検討して、あなたはこのようにそれを行うことができますか?あなたのコードは動作しましたか? – msagala25

+0

[Mongoose&unique field](https://stackoverflow.com/questions/21971666/mongoose-unique-field)の重複の可能性あり –

+0

これは重複しているようです:https://stackoverflow.com/questions/21971666/mongoose -unique-field –

答えて

0

電子メールが既に存在するかどうかをチェックするコールバック関数にユーザーを保存しないため、これは機能しません。それはどのようになるので、

// 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.'); 
    } 
}