我正在通过检查新用户是否已注册来注册。但是对于它显示的每个用户而言,#34;用户已经可用"
signup: function (req, res) {
var username = req.param("username");
var password = req.param("password");
var status = false;
console.log("user : " + username + " : " + password);
Signup.find({username: username}).exec(function(err, usr){
if (err) {
var response = {status:status, error:"db error"};
res.send(500, response);
} else {
if (usr) {
status = true;
res.send(400, {error: "Username already Taken"});
}
else {
signup.create({username: username, password: password}).exec(function(error, user) {
if (error) {
res.send(500, {error: "DB Error"});
} else {
req.session.user = user;
res.send(user);
}
});
}}
});
},
答案 0 :(得分:0)
Signup.find({username: username}).exec(function(err, usr){
// usr is an array
});
find的结果是一个包含与您的查询匹配的对象的列表。列表要么有项目,要么没有项目。在这两种情况下
if (usr) {}
将是真的,因为你基本上只是检查是否定义了usr。所以把它改成
if (usr.length === 0) {
// already exists
}
或者您将find更改为findOne。
答案 1 :(得分:0)
我认为在你的模型中,它清楚地表明用户名必须是唯一的。所以使用findOne()
函数。它只返回一条记录(对象)。
signup: function(req, res) {
var username = req.param("username");
var password = req.param("password");
var status = false;
Signup.findOne({ username: username })
.exec(function(err, usr) {
if (err) {
var response = { status: status, error: "db error" };
return res.send(500, response);
}
if (usr) {
//status = true; --> in this case you don't use 'status' so this assignment is unnecessary
return res.send(400, { error: "Username already Taken" });
} else {
Signup.create({ username: username, password: password })
.exec(function(err, user) {
if (err) {
res.send(500, { error: "DB Error" });
} else {
req.session.user = user;
res.send(user.username);
}
});
}
});
}