mongodb - 添加用户之前的验证

时间:2014-05-17 11:15:13

标签: node-mongodb-native

这就是我如何将用户对象添加到我的mongoDB中。如何检查是否已有其他用户使用相同的电子邮件地址?我可以获取所有用户并进行查找,但我想为此提供更好的性能解决方案。

/* POST to Add User Service */
router.post('/adduser', function(req, res) {

// Set our internal DB variable
var db = req.db;

// Get our form values. These rely on the "name" attributes
var userName = req.body.username;
var userEmail = req.body.useremail;

// Set our collection
var collection = db.get('usercollection');

// Submit to the DB
collection.insert({
    "username" : userName,
    "email" : userEmail
}, function (err, doc) {
    if (err) {
        // If it failed, return error
        res.send("There was a problem adding the information to the database.");
    }
    else {
        // If it worked, set the header so the address bar doesn't still say /adduser
        res.location("userlist");
        // And forward to success page
        res.redirect("userlist");
    }
});
});

3 个答案:

答案 0 :(得分:0)

我不知道这是否非常高效,但最简单的方法可能是使用Mongoose来访问MongoDB。它使您可以定义一个模式,其中某些字段可以标记为唯一,并在保存时自动验证。

答案 1 :(得分:0)

我建议您使用_id(默认为索引且唯一)而不是电子邮件来存储电子邮件地址,它甚至可以在共享环境中使用。如果您不能这样做,那么您可以添加唯一索引。 http://docs.mongodb.org/manual/tutorial/create-a-unique-index/

这里的缺点是,如果收集分片,您将无法使用唯一索引: http://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/

答案 2 :(得分:0)

app.get('/:username',function(req , res){
db.collection.find({username:req.params.username},function(err,docs)   {if(req.params.username==docs[0].username) 
{res.send({data:"username available"} );} else{res.send({data:"username not available"})}})
 } ); 

首先,req.params.username找到任何文件匹配,如果退出它传递给docs,它使用if语句进行验证并将其发送到浏览器。