Node.js 如何插入唯一的emailid并显示已存在的邮件

Node.js 如何插入唯一的emailid并显示已存在的邮件,node.js,mongodb,rest,cloud,ibm-cloud,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.l

下面是代码

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中做错了什么或如何做。

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

您当前的解决方案: 您可能在“查找”字段中选择了错误。当我查看插入文档时,您可能应该查找
{email:inputUserEmail}
而不是
{inputUserEmail:inputUserEmail}

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

我从中得到的是

db.collection('userlist').createIndex("mail", true, function(err, result){}));
应该使邮件成为唯一的索引。这应该只需要执行一次

当您尝试插入数据库中已经存在的一些
邮件时,
insert
应返回一个
err
,类似于
重复索引。所以你可能看起来像

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 }
        );
    });
}); 
这将每次构建索引,因此它将比在某些初始化时仅创建一次索引所需的时间更长,但与其他db操作相比,您通常不会创建用户。它可能应该寻找一个特定的错误(“重复索引”)或者一些你可以通过反复试验找到的东西

无法100%确定语法,因此最好将其视为伪代码。免责声明:从未使用过node.js,因此可能需要调整

您当前的解决方案: 您可能在“查找”字段中选择了错误。当我查看插入文档时,您可能应该查找
{email:inputUserEmail}
而不是
{inputUserEmail:inputUserEmail}

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

我从中得到的是

db.collection('userlist').createIndex("mail", true, function(err, result){}));
应该使邮件成为唯一的索引。这应该只需要执行一次

当您尝试插入数据库中已经存在的一些
邮件时,
insert
应返回一个
err
,类似于
重复索引。所以你可能看起来像

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 }
        );
    });
}); 
这将每次构建索引,因此它将比在某些初始化时仅创建一次索引所需的时间更长,但与其他db操作相比,您通常不会创建用户。它可能应该寻找一个特定的错误(“重复索引”)或者一些你可以通过反复试验找到的东西

无法100%确定语法,因此最好将其视为伪代码。免责声明:从未使用过node.js,因此可能需要调整

您当前的解决方案: 您可能在“查找”字段中选择了错误。当我查看插入文档时,您可能应该查找
{email:inputUserEmail}
而不是
{inputUserEmail:inputUserEmail}

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

我从中得到的是

db.collection('userlist').createIndex("mail", true, function(err, result){}));
应该使邮件成为唯一的索引。这应该只需要执行一次

当您尝试插入数据库中已经存在的一些
邮件时,
insert
应返回一个
err
,类似于
重复索引。所以你可能看起来像

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 }
        );
    });
}); 
这将每次构建索引,因此它将比在某些初始化时仅创建一次索引所需的时间更长,但与其他db操作相比,您通常不会创建用户。它可能应该寻找一个特定的错误(“重复索引”)或者一些你可以通过反复试验找到的东西

无法100%确定语法,因此最好将其视为伪代码。免责声明:从未使用过node.js,因此可能需要调整

您当前的解决方案: 您可能在“查找”字段中选择了错误。当我查看插入文档时,您可能应该查找
{email:inputUserEmail}
而不是
{inputUserEmail:inputUserEmail}

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

我从中得到的是

db.collection('userlist').createIndex("mail", true, function(err, result){}));
应该使邮件成为唯一的索引。这应该只需要执行一次

当您尝试插入数据库中已经存在的一些
邮件时,
insert
应返回一个
err
,类似于
重复索引。所以你可能看起来像

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 }
        );
    });
}); 
这将每次构建索引,因此它将比在某些初始化时仅创建一次索引所需的时间更长,但与其他db操作相比,您通常不会创建用户。它可能应该寻找一个特定的错误(“重复索引”)或者一些你可以通过反复试验找到的东西


不能100%确定语法,因此最好将其视为伪代码。您也可以将用户电子邮件用作收藏中的id字段


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

您还可以使用用户电子邮件作为收藏中的id字段

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