我的用例:
我正在注册页面,我正在向我的服务器发送用户名的ajax请求。服务器应检查它是否符合验证规则(例如字母数字)以及用户名是否被原谅或免费使用。
我的想法:
我已经在我的猫鼬模型上定义了验证规则。为了避免两次定义完全相同的验证规则,我想使用mongoose模式来检查验证规则,如果查询通过,那么它应该尝试在db中查找用户名以检查它是否仍然是免费的。
问题:
不幸的是,它似乎没有检查查询的验证(相反它只在保存之前这样做),因此我不知道如何使用mongoose验证规则来验证用户名输入。
我的代码:
checkSignUp:
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
我的猫鼬模式:
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
用户名验证器:
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]