2017-07-11 9 views
1

ネットを2日間検索しても、特定の回答が見つかりませんでした。私はユーザールートとモデルのために以下のnode.jsコードを持っています。ユーザー名と電子メールがMongoDBに表示されていないかどうかを確認し、存在する場合はメッセージを表示する方法を教えてください。ユーザ名とメールアドレスがデータベース内で一意であるかどうかを確認してください

モデル:

var mongoose = require('mongoose'); 
var bcrypt = require('bcryptjs'); 

// User Schema 
var UserSchema = mongoose.Schema({ 
    username:{type: String , required:true, index: true, unique:true}, 
    email:{type: String, required:true, index: true, unique:true}, 
    password:{type: String, required:true} 
}); 

module.exports = mongoose.model('User', UserSchema) 

ルート:

var express = require('express'); 
var router = express.Router(); 
var User = require('../models/user'); 
var bcrypt = require('bcryptjs'); 

// Get Homepage 
router.get('/', function(req, res){ 
    res.render('index'); 
}); 

router.get('/register',function(req,res){ 
    res.render('register'); 
}); 

// submit form 
router.post('/submit', function(req, res){ 

    // retrieve data from posted HTML form 
    var username = req.body.username; 
    var email = req.body.email; 
    var password = req.body.password; 
    var password_confirm = req.body.password_confirm; 

    // express validator 
    req.checkBody('username','Username is required').notEmpty(); 
    req.checkBody('email','Email is required').notEmpty(); 
    req.checkBody('email','Invalid email').isEmail(); 
    req.checkBody('password','Password is required').notEmpty(); 
    req.checkBody('password','Password must contain at least 6 characters').isLength({min:6}); 
    req.checkBody('password_confirm','Password mismatch').equals(req.body.password); 

    // store the errors 
    var errors = req.validationErrors(); 
    if(errors){res.render('register',{errors:errors});} 
    else { 
     // hash password 
     var salt = bcrypt.genSaltSync(10); 
     var hash = bcrypt.hashSync(password, salt); 
     password=hash; 

     // load data into model 
     var newUser = new User ({username:username, email:email, password:password}); 
     // save the new user 
     newUser.save(function(err,newUser){ 
      if(err){console.error(err);} 
      // console.error is same, but in stderr form 
      else{ 
       console.log('new user saved successfully'); 
       console.log(newUser); 
      } 
     }); 
     res.redirect('/'); 
    } 
}); 

module.exports = router; 

答えて

2
app.post('/authenticate', function(req, res) { 
    var user = new User({ 
    username: req.body.username 
    }); 

    user.save(function(err) { 
    if (err) { 
     if (err.name === 'MongoError' && err.code === 11000) { 
     // Duplicate username 
     return res.status(500).send({ succes: false, message: 'User already exist!' }); 
     } 

     // Some other error 
     return res.status(500).send(err); 
    } 

    res.json({ 
     success: true 
    }); 

    }); 
}) 

あなたがエラーをキャッチし、アプリケーションのフロントエンドにそれを返すことがあります。上記のこのコードは、サーバーの状態500を使用してこれを実現する方法を示す必要があります。私はこれが拡張いくつかに助けを願ってい

How to catch the error when inserting a MongoDB document which violates an unique index?

:ウェブ検索については、この答えと質問は、この前の質問と非常によく似ています。

+0

返信いただきありがとうございます。同じユーザ名で新しいエントリをmongodbに保存することはできます。 console.log(err)を使用すると、エラーは発生しません。あなたが提供した別のケースのリンクを確認しました。少なくとも、そのケースのエラーメッセージがありました。どうして私は何の不具合もしていないのですか? – unclegood

+0

と同じ方法で変数を定義していない可能性があります。ここで私はあなたがこの 'var errors = req.validationErrors();'コンソールログ 'errors'を使って実際に何が起きているのかを見ています。 – ZombieChowder

関連する問題