无法在nodejs服务器上正确保存到mongodb

时间:2015-08-04 09:01:33

标签: node.js mongodb express mongoose

我试图创建一个简单的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;
            }
        }
    }

0 个答案:

没有答案