2017-12-16 23 views
0

こんにちは、私はuserSchemaとユーザー名とパスワードを持っているコードを解決するのを手伝ってください。私はMongoDBデータの重複データを入力すると正常に保存されます.MongoDBに重複データを置いているときにエラーが発生します。mongooseの保存時にエラーが発生しましたmongodbのデータをDublicateに入力します

//UserSchema 

var userSchema =mongoose.Schema({ 
    user:{type:String,require:true,unique:true}, 
    pass:{type:String,require:true,unique:true} 
}) 


router.post('/users',function(req,res){  
    var newUser = new Item.user({ 
     user:req.body.username, 
     pass:req.body.password 
    });   
    if(req.body.username ==null || req.body.username=='' || req.body.password ==null || req.body.password==''){    
     res.json({success : false, message : 'Ensure username ,email and password provided'}); 
    }else{ 
     newUser.save(function(err){ 
      console.log('save errror ',err); 
      if(err){      
       res.json({success : false , message :'user already exist' }); 
      } 
      else{      
       res.json({success :true , message : 'successfully saved'}); 
      } 
     }); 

    }  
}); 

答えて

1

ここでは、あなたが望むことを行うコードの最小限の動作例を示します。 エラーの処理方法を見てください。したがって、重複するキーエラーを他のエラーと区別することは可能です。

私は以前はexpress,body-parsermongooseを使用していました。また、あなたのコードを少しリファクタリングしました。お役に立てれば。

const express = require('express'); 
 
const mongoose = require('mongoose'); 
 
const bodyParser = require('body-parser'); 
 

 
mongoose.connect('mongodb://localhost/my_database'); 
 

 
const UserSchema = mongoose.Schema({ 
 
    user: {type: String, require: true, unique: true}, 
 
    pass: {type: String, require: true, unique: true} 
 
}); 
 

 
const User = mongoose.model('User', UserSchema); 
 

 
const app = express(); 
 
app.use(bodyParser.json()); 
 

 
app.post('/users', function (req, res) { 
 
    if (!req.body.username || !req.body.password) { 
 
     res.json({success: false, message: 'Ensure username, email and password provided'}); 
 
     return; 
 
    } 
 

 
    const newUser = new User({ 
 
     user: req.body.username, 
 
     pass: req.body.password 
 
    }); 
 

 
    newUser.save(function (err) { 
 
     if (err) { 
 
      console.log('save errror ', err); 
 

 
      if (err.name === 'MongoError' && err.code === 11000) { 
 
       // Duplicate error happened. You can handle it separately. 
 
       res.json({success: false, message: 'user already exist'}); 
 
       return; 
 
      } 
 

 
      // Some other error happened, you might also want to handle it. 
 
      res.json({success: false, message: 'some error happened'}); 
 
      return; 
 
     } 
 

 
     res.json({success: true, message: 'successfully saved'}); 
 
    }); 
 
}); 
 

 
app.listen(8888);

+0

しかし、私は、errは、私が(errは、 'エラーを保存')条件はconsole.logを確認することができますどのようにNULLの取得。 –

+0

errがnullの場合、.save()が正常に実行されたことを意味します。この場合、res.json({success:true ...}が呼び出されます。 if(err)文とその戻り値を参照してください。 @MohammadFaisal –

+0

はい.save()は正常に実行されますが、重複したデータはデータベースに保存されます。重複したデータをデータベースに格納しないようにします。 –

関連する問題