我的种子文件应该将2个用户引入我的MongoDB。我的 db.User.remove()肯定会删除我的数据库中的所有现有用户,所以我正在访问正确的数据库。但是, newUser.save()实际上并没有保存记录。
我的console.log显示已生成来自user_list的我的2个用户对象,但我的newUser.save()实际上并没有将新记录保存到User集合(它完全为空)。有什么想法吗?
seed.js
// remove all users
db.User.remove({}, function(err, users){
if(err) {
console.log('Error occurred in remove', err);
} else {
console.log('removed all users');
// create new records based on the array user_list
for (i=0; i < user_list.length; i++) {
var newUser = new User();
// set the user's local credentials
newUser.email = user_list[i].email;
newUser.password = createHash(user_list[i].password);
newUser.company = user_list[i].company;
newUser.firstName = user_list[i].firstName;
newUser.lastName = user_list[i].lastName;
newUser.admin = user_list[i].admin;
console.log(newUser);
// save the user
newUser.save(function(err, users) {
if (err){
console.log('Error in Saving user: '+ err);
throw err;
}
});
}
console.log("created", user_list.length, "users");
process.exit();
}
});
答案 0 :(得分:1)
save
操作是异步的(非阻塞),因此,process.exit();
将先执行,然后保存操作。 user_list
似乎是一个包含静态数据的数组。请尝试记录users
变量或save
回调中的任何标记。
解决此问题的方法是聚合并使用承诺或检查save
回调中的最后一位用户。
答案 1 :(得分:0)
正如Konstantin所说,process.exit()在保存之前被调用。有更好的解决方案,但简单的答案是通过添加一个计数器延迟process.exit():
// remove all users
db.User.remove({}, function(err, users){
if(err) {
console.log('Error occurred in remove', err);
} else {
console.log('removed all users');
// create new records based on the array user_list
var count = 1;
for (i=0; i < user_list.length; i++) {
var newUser = new User();
// set the user's local credentials
newUser.email = user_list[i].email;
newUser.password = createHash(user_list[i].password);
newUser.company = user_list[i].company;
newUser.firstName = user_list[i].firstName;
newUser.lastName = user_list[i].lastName;
newUser.admin = user_list[i].admin;
console.log(newUser);
// save the user
newUser.save(function(err, users) {
count += 1;
if (err){
console.log('Error in Saving user: '+ err);
throw err;
} else if (count == user_list.length) {
process.exit();
}
});
}
console.log("created", user_list.length, "users");
}
});