我试图创建一个简单的html表单,当用户提交它时,它会通过ajax请求发送到服务器。服务器应该获取表单数据并将其存储在mongodb文档中。我正在使用带有快速框架和mongoose的nodejs服务器来使用mongodb。
当我创建一个测试帐户时,它表示该帐户已创建,我被重新定向到tiles.html页面,我得到一个控制台日志,说“#34;用户创建了!"”,所以很好但是,当我回到主页并使用相同的密码再次创建一个帐户时,我没有收到错误,说密码已被占用,它再次创建一个帐户并带我到tiles.html页面。也许我没有正确配置Mongodb,我没有安装热修复(我在Windows7上),这可能是问题还是在代码中?
我通过执行以下命令启动我的服务器
mongod --dbpath /Rockstar22/data
(我不知道这是否是正确的方法)
这是服务器端代码(不包括require语句)
mongoose.connect('mongodb://localhost/myappdatabase');
console.log("connected to mongo...");
var User = require('./users');
其中users.js是
var Schema = mongoose.Schema;
var userSchema = new Schema({
username: { type: String, required: true },
password: { type: String, required: true, unique: true },
age: Number,
gender: Boolean
});
var User = mongoose.model('User', userSchema);
module.exports = User;
我有身体解析器
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
这是处理表单的代码
app.post('/CAform', function(req, res){
var isAJAXreq = req.xhr;
if (isAJAXreq) {
var username1 = req.body.username;
var password1 = req.body.password;
var age1 = req.body.age;
var gender1 = req.body.gender;
if (gender1 === "Male"){
gender1 = true;
} else {
gender1 = false;
}
age1 = parseInt(age1);
User.findOne({ password: password1 }, function(err, user) {
if (user){
res.send(
{data:JSON.stringify({response: 'taken'})
});
}
else {
var newUser = User({
username: username1,
password: password1,
age: age1,
gender: gender1
});
newUser.save(function(err) {
if (err) throw err;
console.log('User created!');
})
res.send(
{data:JSON.stringify({response: 'created'})
});
}
});
}
});
这是用于提交表单的客户端代码(其id为createAccountForm)
$("#createAccountForm").submit(function(e) {
e.preventDefault();
var username1 = $("#CAusername").val();
var password1 = $("#CApassword").val();
var passwordConfirm1 = $("#CApasswordConfirm").val();
var age1 = $("#sel1").val();
var gender1 = $("#sel2").val();
var jsonData = JSON.stringify({
username: username1,
password: password1,
age: age1,
gender: gender1
});
$.ajax({
url: "/CAform",
type: "POST",
dataType: "json",
data: jsonData,
timeout: 5000,
contentType: "application/json",
success: function(data) {
if (data.response === "taken"){
$("#passConfirm").append("Password Already Taken");
return;
} else {
location.href="/tiles.html"
}
},
error: function() {
console.log('process error');
return;
}
}
}