我有一个简单的小用户注册表单,如下所示:
// 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");
}
});
}
}
但是我在验证提交的信息时遇到了问题,就像唯一值一样,这是空的,所以没有人可以将发布请求发送到数据库以绕过jQuery验证功能。我已经阅读了文档,但我似乎无法做到正确。我尝试设置ensureIndex,但是,这似乎不起作用。有关如何在数据库端验证输入的任何信息都将非常感谢!
答案 0 :(得分:5)
MongoDB的优势/功能之一是灵活的架构。 MongoDB不对字段类型强加任何特定的约束。通常,对于Web应用程序,您应该尽可能早地进行验证..首先在客户端(JavaScript)级别,然后是应用程序,并作为数据库服务器中的最后手段。
MongoDB可以进行有限的验证,例如确保唯一索引。任何数据验证(如必填字段或字段类型(字符串,整数,...))都应在您的应用程序代码中完成。
您可以使用jQuery验证,但这只会在客户端(浏览器视图)中有效。任何验证也应该在您的应用程序代码/模型中完成,否则在浏览器中禁用JavaScript将是插入无效数据的简单方法。
答案 1 :(得分:0)
为什么你不能做像密码这样的东西!=“”。对于唯一值,您应该使用find或findOne函数来查看db中是否存在该名称。
我强烈建议安装mongoose。它非常有用,因为它允许您创建模式。因此,如果您熟悉MVC,则在您的模型中,您将拥有包含用户架构的user.js。基本上它给出了用户对象如何存储在数据库中的指导。在您的控制器中,您将尝试在上面的代码中执行您正在执行的操作。你会做一个user = require(user.js),然后你会用user.find()或user.findOne()在数据库中找到那个东西。例如。如果用户名已经在数据库中,那么它不是唯一的。所以不要加他。