微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在单独的文件中简化 Express-Validator 中间件的任何方法

如何解决在单独的文件中简化 Express-Validator 中间件的任何方法

我有一个项目需要使用 Express-Validator 进行大量验证,所以每次我需要验证某些东西时,我都喜欢在每个文件中这样做:

//Validation and Sanitizing Rules
const validationRules = [
  param('tab').isstring().isLength({ min: 1,max: 8 }).trim().escape(),param('categoryID').isNumeric().trim().escape()
]
//Validate and get the result
const validate = (req,res,next) => {
  const errors = validationResult(req)
  // if every thing is good .. next()
  if (errors.isEmpty()) {
    return next()
  }
  //if something is wrong .. push error msg
  const extractedErrors = []
  errors.array().map(err => extractedErrors.push({ [err.param]: err.msg }))
  return res.status(403).json({
    'status': 'alert error','err': extractedErrors,msg: 'Any Error Msg Here:('
  })

我尝试创建文件 validator.js,然后在需要时调用它,但我不喜欢这个想法。

所以我正在考虑像 custom wrapper 这样的解决方案,以便在将来简化我的验证……所以我尝试使用字母关键字创建我的(自定义包装器):

isstring: 's',isNumeric: 'n',isLength: 'l',trim: 'tr',escape: 'es',..etc

现在,当我想验证诸如“数字”之类的东西时,我会将其传递给对象中的自定义包装器:

customValidationRules({field : "categoryID",type: ['n','tr','es']})

并且包装器中的验证将是:

param('categoryID').isNumeric().trim().escape()

任何建议或指导方针来创建这种包装器.. ty

解决方法

你应该翻转它,并使用如下结构:

const validators = {
    s: isString,n: isNumeric,...
};

然后给定一个规则数组 validationRules 像 `['n','tr','es'],你可以这样做:

validationRules.reduce((rule,acc) => validators[rule].call(acc),param(paramName));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?