2

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

// 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");
            }
        });
    }
}

但是我在验证提交的信息时遇到了麻烦,比如唯一值是空的,诸如此类,所以没有人可以向数据库发送 post 请求以绕过 jQuery 验证功能。我已通读文档,但似乎无法正确理解。我尝试设置一个 ensureIndex,但是,这似乎不起作用。任何有关如何验证数据库端输入的信息都将非常感谢!

4

2 回答 2

5

MongoDB 的优势/特性之一是灵活的模式。MongoDB 没有对字段类型施加任何特定的约束。一般来说,对于 Web 应用程序,您应该尽可能早地进行验证。所以首先在客户端 (JavaScript) 级别,然后是应用程序,最后在数据库服务器中进行验证。

MongoDB 验证

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

客户端/应用程序验证

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

于 2013-04-05T07:03:57.827 回答
0

为什么你不能做密码!=“”之类的东西。至于唯一值,您应该使用 find 或 findOne 函数来查看数据库中是否存在该名称。

我强烈建议安装猫鼬。它非常有用,因为它允许您创建模式。因此,如果您熟悉 MVC,在您的模型中,您将拥有包含用户架构的 user.js。基本上它给出了用户对象将如何存储在数据库中的指南。在您的控制器中,您将尝试在上面的代码中执行您正在执行的操作。你会做一个 user = require(user.js) 然后你会做 user.find() 或 user.findOne() 在数据库中找到那个东西。例如。如果用户名已经在数据库中,那么它不是唯一的。所以不要加他。

于 2013-04-05T06:02:37.770 回答