求问,node中对于表单校验一般用哪个库?
//定义
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
});
3、执行数据验证
validator.validateAll({username: 'abc'}, function(err, data){
if(err){
// 输出 username 字符长度不能少于4个长度
return console.log(err.message);
}
// data 为验证后的数据
});