求问,Nodejs中对于表单校验一般用哪个库?
求问,Nodejs中对于表单校验一般用哪个库?
//定义
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。谢谢。
在Node.js中进行表单校验时,express-validator
是一个非常流行且功能强大的库。它不仅提供了丰富的验证方法,还与Express框架无缝集成,能够方便地处理请求中的数据。
使用 express-validator
的步骤
首先,你需要安装 express-validator
:
npm install express-validator
接下来,我们可以利用 express-validator
来替换原有的验证逻辑。以下是一个简单的示例,展示了如何使用 express-validator
进行表单校验。
示例代码
const { check, validationResult } = require('express-validator');
// 定义路由处理函数
app.post('/signup', [
// 验证规则
check('username')
.exists().withMessage('用户名不能为空')
.isLength({ min: 2, max: 12 }).withMessage('用户名长度应在2到12个字符之间'),
check('email')
.exists().withMessage('邮箱不能为空')
.isEmail().withMessage('请输入有效的邮箱地址'),
check('password')
.exists().withMessage('密码不能为空')
.isLength({ min: 7 }).withMessage('密码长度至少为7个字符')
], (req, res) => {
// 获取校验结果
const errors = validationResult(req);
if (!errors.isEmpty()) {
// 如果存在错误,则返回错误信息
return res.status(400).json({ errors: errors.array() });
}
// 处理表单提交的逻辑
res.send('用户注册成功');
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
- 引入
express-validator
:我们通过require('express-validator')
引入所需的验证方法。 - 定义验证规则:使用
check()
方法来定义每个字段的验证规则。这里我们检查用户名、邮箱和密码,并为每个验证规则添加相应的错误消息。 - 获取验证结果:通过调用
validationResult(req)
获取验证结果,并检查是否存在错误。 - 处理错误:如果验证失败(即
errors.isEmpty()
返回false
),则返回包含所有错误信息的响应。 - 处理成功情况:如果验证通过,则继续执行后续的业务逻辑。
这种方式不仅能方便地一次性获取所有错误信息,还能与Express框架紧密集成,使得代码更加简洁和易读。
我还是在用 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 为验证后的数据
});
在Node.js中进行表单验证时,通常会使用express-validator
库。它不仅支持链式调用验证方法,还集成了Express框架,使得集成更加方便。
示例代码
首先需要安装express-validator
:
npm install express-validator
然后可以在路由处理函数中使用它来验证表单数据:
const { check, validationResult } = require('express-validator');
app.post('/signup', [
// 验证规则
check('username')
.exists().withMessage('用户名不能为空')
.isLength({ min: 2, max: 12 }).withMessage('用户名的长度应该在2到12个字符之间'),
check('email')
.exists().withMessage('邮箱不能为空')
.isEmail().withMessage('请提供有效的邮箱地址'),
check('password')
.exists().withMessage('密码不能为空')
.isLength({ min: 7, max: 64 }).withMessage('密码不能少于7个字符')
], (req, res) => {
// 获取验证结果
const errors = validationResult(req);
if (!errors.isEmpty()) {
// 如果验证失败,则返回错误信息
return res.status(400).json({ errors: errors.array() });
}
// 处理正确的请求逻辑
res.send('Signup successful');
});
解释
- 引入库:使用
express-validator
中的check
和validationResult
方法。 - 定义验证规则:在路由处理函数中通过数组传递多个验证规则。每个验证规则使用
check
方法指定需要验证的字段,并通过.withMessage()
方法设置自定义的错误消息。 - 获取验证结果:使用
validationResult(req)
获取验证结果对象,如果存在错误则返回错误信息,否则继续处理正常流程。
这种方法不仅简化了代码结构,也使得验证过程更加灵活和强大。