如何插入唯一的电子邮件ID并显示已存在的消息

时间:2014-08-26 15:28:53

标签: node.js mongodb rest cloud ibm-cloud

以下是代码

user.js的:

/*
 * POST to adduser.
 */

router.post('/adduser', function(req, res) {
    var db = req.db;
    db.users.findOne({ inputUserEmail: inputUserEmail }, function(err, user) { if (user) { 
    console.log("user exists") } else { console.log("user doesn't exist") };
    db.collection('userlist').insert(req.body, function(err, result){
        res.send(
            (err === null) ? { msg: '' } : { msg: err }
        );
    });
}); 

下面是插入代码:

global.js:

// Add User
function addUser(event) {
    event.preventDefault();

    // Super basic validation - increase errorCount variable if any fields are blank
    var errorCount = 0;

    $('#addUser input').each(function(index, val) {
        if($(this).val() === '') { errorCount++; }
    });

    // Check and make sure errorCount's still at zero
    if(errorCount === 0) {
        // If it is, compile all user info into one object
        var newUser = {
            'username': $('#addUser fieldset input#inputUserName').val(),
            'email': $('#addUser fieldset input#inputUserEmail').val(),
            'fullname': $('#addUser fieldset input#inputUserFullname').val(),
            'age': $('#addUser fieldset input#inputUserAge').val(),
            'location': $('#addUser fieldset input#inputUserLocation').val(),
            'gender': $('#addUser fieldset input#inputUserGender').val()
        }

我是这项技术的新手,这是一个非常基本的问题。但我无法编码。

请告诉我user.js中我做错了什么或怎么做。

3 个答案:

答案 0 :(得分:1)

免责声明:从未使用过node.js,因此可能需要调整

您当前的解决方案:

当我查看您的插入文档时,您可能在找到的字段中选择了错误的字段,您应该寻找{email: inputUserEmail}而不是{inputUserEmail: inputUserEmail}

索引解决方案

您可以让数据库为您完成工作,我们的想法是使mail成为唯一索引,以便mongodb防止在数据库级别重复插入。 node.js驱动程序文档的相关部分可以be found here

我从中得到的是

db.collection('userlist').createIndex("mail", true, function(err, result){}));

应该使邮件成为唯一索引。这应该只需要执行一次。

当您尝试插入数据库中已存在的某些mail时,insert应返回err类似duplicate index的内容。所以你插入可能看起来像

router.post('/adduser', function(req, res) {
    var db = req.db; 
    db.collection('userlist').createIndex("mail", true, function(err, result){}));
    db.collection('userlist').insert(req.body, function(err, result){
           if (err) {console.log("user exists") }
         res.send(
            (err === null) ? { msg: '' } : { msg: err }
        );
    });
}); 

这将每次构建索引,因此它将花费比在某些初始化时仅创建一次索引所需的时间更长的时间,但是再次与其他数据库操作相比,您不会经常创建用户。它可能应该寻找特定错误(“重复索引”)或者您可以通过反复试验找到的东西。

不是百分之百确定语法,因此最好将其视为伪代码

答案 1 :(得分:1)

您还可以将用户电子邮件用作集合中的ID字段。

http://docs.mongodb.org/manual/tutorial/insert-documents/

var newUser = {
    '_id': $('#addUser fieldset input#inputUserEmail').val(),
    'username': $('#addUser fieldset input#inputUserName').val(),
    'email': $('#addUser fieldset input#inputUserEmail').val(),
    'fullname': $('#addUser fieldset input#inputUserFullname').val(),
    'age': $('#addUser fieldset input#inputUserAge').val(),
    'location': $('#addUser fieldset input#inputUserLocation').val(),
    'gender': $('#addUser fieldset input#inputUserGender').val()
};

db.collection("userList").insert(newUser);

通过使用上述解决方案,您不必担心获得额外的索引并维护它。

答案 2 :(得分:1)

此问题属于mongodb而非Bluemix,但您需要在电子邮件字段上创建唯一索引以避免重复,如下所示:

var newUser = {

   '_id': $('#addUser fieldset input#inputUserEmail').val(),
   'email': $('#addUser fieldset input#inputUserEmail').val(),

     }

这样只会插入唯一的电子邮件-id。有关唯一索引的详细信息,请参阅以下链接:

http://docs.mongodb.org/manual/core/indexes/