使用猫鼬进行表单验证

时间:2017-05-17 18:48:26

标签: node.js mongodb validation express mongoose

我的用例:

我正在注册页面,我正在向我的服务器发送用户名的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'
    })
]

0 个答案:

没有答案