我有一个名为interview_prac
的mongodb数据库。在interview_prac
中有一个名为Users
的集合。当用户注册用户名和密码时,会存储在此集合中,例如{name:_username,password:_password}
。
我已经在Users
中插入了一个项目。当我输入db.Users.find()
时,我会收到以下内容:{ "_id" : ObjectId("58a22abd0321b10be42f82ac"), "name" : "reddit", "password" : "1234" }
现在,当用户注册时,新用户名应插入此集合中,但不会发生。
这是我的代码:
router.post('/adduser', function (req, res, next) {
var _username = req.body.username;
var _password = req.body.password;
var url = 'mongodb://localhost:27017/interview_prac';
MongoClient.connect(url, function (err, db) {
//if we didn't connect, throw error
if (err)
throw err;
console.log("connected")
var users = db.collection('Users')
users.findOne({
name: _username
}, function (err, user) {
if (user) {
err = 'The username already exists'
res.render('about', {
msg: err
})
} else {
users.insert({
name: _username,
password: _password
}, function (err, result) {
console.log("entry saved")
var new_msg = "Welcome " + _username
res.render('about', {
msg: new_msg
})
})
}
})
db.close()
})
console.log("Database closed")
})
每次新用户注册时,显示entry saved
并关闭数据库,这意味着新用户应该在我的收藏中。但是当我做db.Users.find()
时。我只有一个用户,应该有两个。我似乎无法弄清楚为什么会出现这种错误。
答案 0 :(得分:1)
Mongo
的函数是异步的。在您db
回调中的任何代码完成之前,您正在关闭connect
连接。
在db.close()
的回调中更改insert
来电。
router.post('/adduser', function (req, res, next) {
var _username = req.body.username;
var _password = req.body.password;
var url = 'mongodb://localhost:27017/interview_prac';
MongoClient.connect(url, function (err, db) {
//if we didn't connect, throw error
if (err)
throw err;
console.log("connected")
var users = db.collection('Users')
users.findOne({
name: _username
}, function (err, user) {
if (user) {
err = 'The username already exists'
res.render('about', {
msg: err
})
} else {
users.insert({
name: _username,
password: _password
}, function (err, result) {
db.close()
console.log("Database closed")
console.log("entry saved")
var new_msg = "Welcome " + _username
res.render('about', {
msg: new_msg
})
})
}
})
})
})