我是软件开发人员的学徒,因此我对MongoDB和ExpressJS没有多少经验。
我的任务是将新用户插入数据库(MongoDB)。在此之前我想保证,该名称在数据库中不存在。如果数据库中不存在用户名,那么我想继续插入新用户的任务。
以下代码适用于ExpressJS(但MongoDB的Model'用户'可以使用!):
router.post('/signUp', function(req, res, next) {
var contents = req.body;
var pass;
var search = user.findOne({username: contents.username});
search.exec(function (error, user) {
if (error) {
res.status(500).json({failure: "An error has occured:\t" + error});
pass = false;
}
if (user) {
res.status(500).json({failure: "Username is already forgiven!\nPlease choose another username."});
pass = false;
} else pass = true;
});
console.log("Shall I insert the new user? " + pass);
if (pass) res.status(200).json({success: "You were signed up!"});
else res.status(500).json({failure: "You cannot sign up, because there's an internal error!"});
});
一件事是,无论数据是否存在,传递都将始终未定义。
这对我来说很奇怪,但是在函数'search.exec()'之前声明了全局变量'pass'。
我的代码出了什么问题?
非常感谢您的帮助。
最好的问候 t.koelpin
EDITED 04.05.2015 - 13:15 h
我用以下代码解决了这个问题:
var search = user.findOne({username: contents.username});
search.exec(function (error, user) {
if (error) res.status(500).json({failure: "An error has occured:\t" + error});
if (user) res.status(500).json({failure: "Username is already forgiven!\nPlease choose another username."});
else {
// Code for the insertions to MongoDB
res.status(200).json({success: "You were signed up!"});
}
});