0

下面是代码

用户.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 }
        );
    });
}); 

下面是插入代码:

全球.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或如何做。

4

3 回答 3

1

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

您当前的解决方案:

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

索引解决方案

您可以让数据库为您完成工作,其想法是创建mail一个唯一索引,以便 mongodb 防止在数据库级别上重复插入。可以在此处找到node.js 驱动程序文档的相关部分。

我从中得到的是

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 }
        );
    });
}); 

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

不是 100% 确定语法,因此最好将其视为伪代码

于 2014-08-26T16:04:10.280 回答
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/

于 2014-12-14T05:11:52.487 回答
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);

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

于 2014-08-26T16:46:54.290 回答