簡體   English   中英

在單獨的文件中簡化 Express-Validator 中間件的任何方法

[英]any ways to simplify Express-Validator middleware in seperate file

我有一個項目需要使用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然后在需要時調用它,但我不喜歡這個主意。

所以我想像自定義包裝器這樣的解決方案來簡化我未來的驗證..所以我嘗試使用字母關鍵字創建我的(自定義包裝器):

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

現在,當我想驗證“數字”之類的內容時,我將其傳遞給 object 中的自定義包裝器:

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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM