求问,node中对于表单校验一般用哪个库?
发布于 9 年前 作者 irou1217 7608 次浏览 最后一次编辑是 8 年前 来自 问答
//定义
validator = (message)->
     v = new Validator()
    errors = []
    v.error = (msg)->
      console.log msg,'msg'
      errors.push(msg)
    v.check(message.username, '用户名的长度应该在2到12个字符之间').len(2, 12)
    v.check(message.email, '请提供有效的邮箱地址').isEmail()
    v.check(message.password, '密码不能少于7个字符').len(7, 64)
    return errors

使用:

  console.log("save user:#{req.body.email} from signup")
  err = validator(req.body)

这样用,但是我发现node-validator作者修改了这个npm模块 已经不支持这么写了,总不能每条都判断异常吧。之前的写法,可以一次性把所有error都拿到的。 求问,大家一般用哪个validator。谢谢。

6 回复

我还是在用 validator。 没必要一次性把所有 error 拿到吧?当第一次出错的时候,就返回第一次出错的原因好了呀。

自己写了一个…… 这个还是挺简单的吧?

用的是这个node-validator模块吗?文档中的示例代码显示,它是支持一次性处理所有错误的,虽然语法跟你写的代码不同。

像这种校验功能,如果放在客户端JavaScript执行,少一次与服务器端的交互,我感觉用户体验更好。

https://github.com/skipify/datagate 我也在寻找好方法,暂时用的自己刚写的这个,支持前后端验证,基本的验证规则可以复用

function notEmpty (val) {  
    return typeof val ==='string' && val !== '' && !(/^\s+$/.test(val));
}

function equal (val, val2) { 
    return val === val2;
}

function notEqual (val, val2) {
    return !equal(val, val2);
}

function validate (vds, val, val2) {
    for (var i = 0, len = vds.length; i < len; i++) {
        if (!vds[i].handler(val, val2)) {
            return vds[i].message;
        }
    }
    return '';
}

exports.validate = validate;

exports.validate.username = [
{
    message : '需要输入值.',
    handler : notEmpty
}];

exports.validate.password = [
{
    message : '需要输入值.',
    handler : notEmpty
},
{
    message : '密码必须在4位到16位.',
    handler : function (val) { 
        return val.length <= 16 && val.length >= 4;
    }
},
{
    message : '前后密码输入不一致.',
    handler : equal
}];

exports.validate.email = [
{
    message : '需要输入值.',
    handler : notEmpty
},
{
    message : '输入无效,必须是字符数字下划线.',
    handler : function (val) {
        return (/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)+$/).test(val);
    }
}];

exports.validate.notEmpty = [
{
    message : '需要输入值.',
    handler : notEmpty
}];

去年写的验证,只剩下一部分草稿了

可以试试ydr-validator

1、实例化一个表单验证

var validator = new require('ydr-validator');

2、添加验证规则

validator.pushRule({
	// 表单名称
	name: 'username',
	// 类型
	type: 'string',
	// 最小长度
	minLength: 4,
	// 最大长度
	maxLength: 12
});

更多验证规则参考readme

3、执行数据验证

validator.validateAll({username: 'abc'}, function(err, data){
	if(err){
		// 输出 username 字符长度不能少于4个长度
		return console.log(err.message);
	}
	
	// data 为验证后的数据
});
回到顶部