如何使用MongoDB验证输入?

Dat*_*sik 2 javascript mongodb node.js

我有一个简单的小用户注册表单,如下所示:

// POST Register new user
exports.new = function(req, res) {
    var db = require('mongojs').connect('localhost/busapp', ['users']);
    db.users.ensureIndex({email:1}, {unique: true})

    function User(email, username, password, dateCreated) {
        this.email = email;
        this.username  = username;
        this.password = password;
        this.dateCreated = new Date();
        this.admin = 0;
        this.activated = 0
    }

    if (req.body.user.password !== req.body.user.passwordc) {
        res.send('Passwords do not match');
    } else {

        var user = new User(req.body.user.email, req.body.user.username, 
                            req.body.user.password);

        // TODO: Remove this after we clarify that it works.

        console.log(user.email + " " + user.username + " " +  
                    user.password);


        // Save user to database

        db.users.save(user, function(err, savedUser) {
            if (err) {
                res.send(err);
            } else {
            console.log("User " + savedUser.email + " saved");
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我在验证提交的信息时遇到了问题,例如唯一值,这是空的,那样的事情,所以没有人可以向数据库发送post请求以绕过jQuery验证功能.我已经阅读了文档,但我似乎无法做到正确.我尝试设置ensureIndex,但是,这似乎不起作用.有关如何验证数据库端输入的任何信息都将非常感谢!

小智 5

MongoDB的优势/功能之一是灵活的架构.MongoDB不对字段类型强加任何特定的约束.通常对于Web应用程序,您应该尽可能早地进行验证..因此首先在客户端(JavaScript)级别,然后是应用程序,并作为数据库服务器中的最后手段.

MongoDB验证

MongoDB可以进行有限的验证,例如确保唯一索引.任何数据验证(如必填字段或字段类型(字符串,整数,...))都应在您的应用程序代码中完成.

客户端/应用程序验证

您可以使用jQuery验证,但这只会在客户端(浏览器视图)中有效.任何验证也应该在您的应用程序代码/模型中完成,否则在浏览器中禁用JavaScript将是插入无效数据的简单方法.