Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在使用passport注册后向数组中添加表示用户的对象_Javascript_Arrays_Login_Mongoose_Passport.js - Fatal编程技术网

Javascript 在使用passport注册后向数组中添加表示用户的对象

Javascript 在使用passport注册后向数组中添加表示用户的对象,javascript,arrays,login,mongoose,passport.js,Javascript,Arrays,Login,Mongoose,Passport.js,我正在尝试创建一个用户名和密码列表,这样当用户使用其凭据登录时,他们可以看到其他人看到的所有数据,但他们仍然必须使用自己的凭据。我想创建一个类似以下对象的列表:[{username:“user1”,password:“pass1”},{username:“user2”,password:“pass2”}]。这应该在注册时创建。我想我会帮上忙,但我没有得到我想要的。我有这个: var userlist = new mongoose.Schema({username: String, passwor

我正在尝试创建一个用户名和密码列表,这样当用户使用其凭据登录时,他们可以看到其他人看到的所有数据,但他们仍然必须使用自己的凭据。我想创建一个类似以下对象的列表:[{username:“user1”,password:“pass1”},{username:“user2”,password:“pass2”}]。这应该在注册时创建。我想我会帮上忙,但我没有得到我想要的。我有这个:

var userlist = new mongoose.Schema({username: String, password : String })
var userSchema = new mongoose.Schema({
    users : [userlist]
})
我尝试将新用户添加到阵列中,如下所示:

app.post("/signup", function(req, res){
    var user = new User;
    user.users.push({username : req.body.username, password : req.body.password})
    user.save(function(err){
        if(err) return handleError(err);
        console.log("success")
    })
    // User.create(users : [{username : req.body.username, password : req.body.password}], function(err, doc){
    //  console.log(doc);

    // })
    res.redirect("/login")
})
这是我的

> db.users.find().pretty()
{
        "_id" : ObjectId("56ba6219763de71c03199a70"),
        "users" : [
                {
                        "username" : "user1",
                        "password" : "pass1",
                        "_id" : ObjectId("56ba6219763de71c03199a71")
                }
        ],
        "__v" : 0
}
{
        "_id" : ObjectId("56ba6225763de71c03199a72"),
        "users" : [
                {
                        "username" : "user2",
                        "password" : "pass2",
                        "_id" : ObjectId("56ba6225763de71c03199a73")
                }
        ],
        "__v" : 0
}
>
它正在制作单独的文件。我希望它看起来像这样

{
        "_id" : ObjectId("56ba6219763de71c03199a70"),
        "users" : [
                {
                        "username" : "user1",
                        "password" : "pass1",
                        "_id" : ObjectId("56ba6219763de71c03199a71")
                },                    
                {
                        "username" : "user2",
                        "password" : "pass2",
                        "_id" : ObjectId("56ba6225763de71c03199a73")
                }
        ],
        "__v" : 0
}

在子文档中包含objectid对我来说并不重要。我只想将所有用户分组,这样当他们登录时,我可以做一些事情,例如,如果文档在那里,凭据良好,那么继续访问网站的其他部分。

我不确定您现在是否已经解决了您的问题,不管您的问题的答案是什么

首先,如果在
子文档
中不需要
\u id
,则在
架构
中相应地声明,并且不会创建
\u id

var userSchema = new Schema({ username: String, password: String},{ _id: false }); 
如果对
用户使用上述
模式
,则
子文档
中不应有
\u id
字段

您应该知道,要插入
子文档
,您需要知道它的父文档
。如果插入
子文档时未提供
父文档
,则每次插入都会创建一个新的p
a
租金。在这种情况下,父文档包含
\u id
用户
子文档。如果我有确切的问题,我会用以下方法解决:

模式设计保持如下所示(为了避免混淆,我对它们进行了不同的命名):

现在,我将声明父模型,如下所示:

var UserList = mongoose.model('UserList', userListSchema);
//see below what list gets assigned. 
var list;
> db.userlists.find().pretty();
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        }
    ],
    "__v" : 0
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        }
    ],
    "__v" : 1
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        },
        {
            "password" : "pass7",
            "username" : "user7"
        }
    ],
    "__v" : 2
}
现在让我们假设我有一个路由处理程序,我希望在注册时继续添加用户,如下所示:

app.get("/newuser/:username/:password", function(req, res) {
  //create user model 
  var User = mongoose.model('User', userSchema);
  //load user module, for testing i use params, you can change this to req.body
  var user = new User({username: req.params.username, password: req.params.password});

  //I would like to find the first document in userlists collection 
  UserList.findOne({}, function(err, result) {
    if(err) console.log(err);
    //below if condition is true, if there is one document with users subdoc
    if(result) {
      console.log('Found existing document with users subdocument. Adding user to array.')

       //assign the parent where the subdoc should be inserted to list
       list = result; 

       //there already is a document with subdocument users, so append to it 
       list.users.push(user);

      //save the changed list. 
      list.save(function(err) {
        if (err) console.log(err);
        console.log('User saved.');
      });
    } else {
      console.log('No document found. Creating one and adding  this user to users subdocument.');
      // initialize list model with first ever user 
      list = new UserList({ users: [user] });

      //save the new changed list
      list.save(function(err) {
        if (err) console.log(err);
        console.log('User saved.');
      });
    }
  })
});
http://127.0.0.1:8080/newuser/user2/pass2
完成了。现在,当我第一次运行应用程序并访问以下URL时

http://127.0.0.1:8080/newuser/user1/pass1
userslist
集合如下所示:

var UserList = mongoose.model('UserList', userListSchema);
//see below what list gets assigned. 
var list;
> db.userlists.find().pretty();
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        }
    ],
    "__v" : 0
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        }
    ],
    "__v" : 1
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        },
        {
            "password" : "pass7",
            "username" : "user7"
        }
    ],
    "__v" : 2
}
我想使用不同的参数访问链接,如下所示:

app.get("/newuser/:username/:password", function(req, res) {
  //create user model 
  var User = mongoose.model('User', userSchema);
  //load user module, for testing i use params, you can change this to req.body
  var user = new User({username: req.params.username, password: req.params.password});

  //I would like to find the first document in userlists collection 
  UserList.findOne({}, function(err, result) {
    if(err) console.log(err);
    //below if condition is true, if there is one document with users subdoc
    if(result) {
      console.log('Found existing document with users subdocument. Adding user to array.')

       //assign the parent where the subdoc should be inserted to list
       list = result; 

       //there already is a document with subdocument users, so append to it 
       list.users.push(user);

      //save the changed list. 
      list.save(function(err) {
        if (err) console.log(err);
        console.log('User saved.');
      });
    } else {
      console.log('No document found. Creating one and adding  this user to users subdocument.');
      // initialize list model with first ever user 
      list = new UserList({ users: [user] });

      //save the new changed list
      list.save(function(err) {
        if (err) console.log(err);
        console.log('User saved.');
      });
    }
  })
});
http://127.0.0.1:8080/newuser/user2/pass2
集合的输出如下所示:

var UserList = mongoose.model('UserList', userListSchema);
//see below what list gets assigned. 
var list;
> db.userlists.find().pretty();
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        }
    ],
    "__v" : 0
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        }
    ],
    "__v" : 1
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        },
        {
            "password" : "pass7",
            "username" : "user7"
        }
    ],
    "__v" : 2
}
现在我终止应用程序,然后重新运行应用程序并访问以下url:

http://127.0.0.1:8080/newuser/user7/pass7
集合的输出如下所示:

var UserList = mongoose.model('UserList', userListSchema);
//see below what list gets assigned. 
var list;
> db.userlists.find().pretty();
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        }
    ],
    "__v" : 0
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        }
    ],
    "__v" : 1
}
{
    "_id" : ObjectId("56c349d6479f5b9b1eaea1c8"),
    "users" : [
        {
            "password" : "pass1",
            "username" : "user1"
        },
        {
            "password" : "pass2",
            "username" : "user2"
        },
        {
            "password" : "pass7",
            "username" : "user7"
        }
    ],
    "__v" : 2
}
好了。看到
userlists
collection总是有一个
document
,并且它的数组会不断扩展,我感到很遗憾,也许用这种方式解决问题不是一个好的做法。如果我是您,我会将每个用户存储为单个
记录
,然后执行分组方式或任何其他
聚合
操作