{"id":19336937,"url":"https://github.com/aweiu/express-verify","last_synced_at":"2025-07-17T08:34:34.561Z","repository":{"id":75622380,"uuid":"71959764","full_name":"aweiu/express-verify","owner":"aweiu","description":"express校验插件，用于校验用户提交参数","archived":false,"fork":false,"pushed_at":"2017-09-23T05:33:59.000Z","size":14,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-03T17:12:41.525Z","etag":null,"topics":["express","express-validation","express-validator"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aweiu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-26T02:50:41.000Z","updated_at":"2020-12-10T20:00:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"fa0cbafa-7c6d-4ef2-8ad8-c71a53976ef5","html_url":"https://github.com/aweiu/express-verify","commit_stats":{"total_commits":15,"total_committers":1,"mean_commits":15.0,"dds":0.0,"last_synced_commit":"0c47bf64aae6fd3aeee5c91e356d162e8b301fe9"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aweiu/express-verify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aweiu%2Fexpress-verify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aweiu%2Fexpress-verify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aweiu%2Fexpress-verify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aweiu%2Fexpress-verify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aweiu","download_url":"https://codeload.github.com/aweiu/express-verify/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aweiu%2Fexpress-verify/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265585416,"owners_count":23792735,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["express","express-validation","express-validator"],"created_at":"2024-11-10T03:12:58.669Z","updated_at":"2025-07-17T08:34:34.545Z","avatar_url":"https://github.com/aweiu.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# express-verify\nexpress校验插件，用于校验用户提交参数\n\n## 安装\n```\nnpm install express-verify\n```\n## 使用\n*原则：适用于参数文本本身的校验，比如文本长度，数字大小，是否为空这类。而需要从数据库中校验的操作，比如通过某个参数判断用户是否存在这种校验应该放在router中*\n### 一，在./app.js中执行全局配置\n```\nimport verify from 'express-verify'\n// 以下配置非必须，按你的需求来\n// 校验前的hook 一般用于过滤或修改某些提交参数\nverify.beforeVerify = (req, res, next, router) =\u003e {\n    // next(Function)：继续校验\n    // router(Function)：跳过本次校验，开始执行路由\n    // 如果提交的name为\"admin\"则跳过本次校验，否则继续校验\n    req.body.name === 'admin' ? router() : next()\n}\n// 校验不通过的hook 用于配置校验不通过时的返回信息\nverify.onError = (errMsg, req, res, next) =\u003e {\n  // errMsg：校验不通过的错误信息\n  // next(Function)：忽略本次错误，继续执行路由\n  \n  // 插件默认执行如下代码，返回错误信息。你可以在这里修改校验不通过的response\n  res.send({err_msg: errMsg})\n}\n// 校验插件获取req参数的方法配置 一般用于项目需要通过自己封装的方法获取参数\nverify.paramGetter = (req, paramOn) =\u003e {\n  // paramOn：参数在req中的位置(body/query/params...)\n  return '处理后的提交参数'\n})\n// 配置默认校验不通过时的提示信息\nverify.errMsg = YourErrMsg\n```\n### 二，针对每个router创建校验规则文件\n*推荐在当前项目根目录下创建verify文件夹，所有校验规则放在该目录*\n```\n// ./verify/users.js 针对Router =\u003e users 的校验规则\nimport verify from 'verify'\nexport default {\n  // 添加用户 接口的校验规则\n  addUser: verify({\n    // 参数路径 body/query/params ...\n    body: {\n      // 参数名\n      name: {\n        // 通过mark参数给name一个别名 使错误提示更具体(校验不通过会返回‘姓名不能为空／姓名至少2位／姓名至多6位’)\n        mark: '姓名',\n        // 具体的校验规则\n        minLength: 2,\n        maxLength: 6\n      },\n      phone: {\n        // 自定义校验不通过提示\n        errMsg: '手机号不正确',\n        phone: true\n      }\n    }\n  })\n}\n```\n### 三，具体的router中引用对应的校验规则\n```\nimport express from 'express'\n// 引用校验规则\nimport usersVerify from '../verify/users'\nvar router = express.Router()\nrouter.put('/users', usersVerify.addUser, (req, res, next) =\u003e {\n  // 当所有参数校验都通过后才会执行这里的代码\n})\n```\n## 支持的校验规则(继承verify-base.js)\n* length: 校验文本长度\n* minLength: 校验文本最短长度\n* maxLength: 校验文本最长长度\n* maxNumber: 校验数字最大值\n* minNumber: 校验数字最小值\n* decimalLength: 校验小数位\n* number: 校验是否为数字\n* int: 校验是否为整数\n* phone: 校验是否为手机号\n* idCard: 校验是否为身份证号\n* bankCard: 校验是否为银行卡号\n* email: 校验是否为电子邮件地址\n* verifyCode: 校验是否为6位数字验证码\n* canBeNull: 当参数为空时跳过校验，不会执行后面的校验规则\n* mustBeNull: 强制参数必须为空，不允许提交\n\n## 重要校验参数说明\n### mark\n* 用于给校验参数配置别名以替换默认校验不通过提示中的{mark}关键字。**错误提示优先读取errMsg配置项，如果已经配置了errMsg就没必要mark了**\n* 如果没有配置mark和errMsg，将直接使用参数名作为别名\n* 校验规则中出现的参数，默认都会校验不为空。如果某个参数仅仅是要校验不为空可以使用缩写：\n```\n// 假设name参数在req.body中\nbody: {\n  name: '姓名'\n}\n```\n### errMsg\n用于自定义校验不通过提示\n```\n// 假设token参数在req.body中\n// 当token长度不等于10时，错误提示为：'您没有权限访问'\nbody: {\n  token: {\n    errMsg: '您没有权限访问',\n    length: 10\n  }\n}\n```\n### canBeNull\n**校验规则中出现的参数，默认都会校验不为空**，该参数一般用于如下情况，比如邀请码这种一般可以为空的参数\n```\n// 假设invitationCode参数在req.body中\nbody: {\n  invitationCode: {\n    mark: '邀请码'\n    // 邀请码为空时不校验\n    canBeNull: true,\n    // 不为空时校验长度是否为6\n    length: 6\n  }\n}\n```\n### mustBeNull\n用于强制参数必须为空，不允许提交。可以使用缩写\n```\n// 假设id参数在req.body中\nbody: {\n  id: false\n}\n```\n### maxNumber\n注意小于和小于等于的写法\n```\n// 假设number1/number2参数在req.body中\nbody: {\n  number1: {\n    // number1 \u003c= 10\n    maxNumber: 10\n  },\n  number2: {\n    // number2 \u003c 10\n    maxNumber: '!10'\n  }\n}\n```\n### minNumber\n参考**maxNumber**配置\n\n## 自定义校验方法\n如果自带的校验方法满足不了您的需求，可以在校验规则中插入您自己的校验方法\n```\n// 假设id参数在req.body中\nbody: {\n  id: {\n    length: 24,\n    verify (val) {\n      // val为id参数的提交值\n      // 可以直接return校验不通过的提示\n      // if (val.substr(0,2) !== 'id') return 'id格式不正确'\n      // 如果直接return true/false 校验不通过提示将使用errMsg或默认错误提示\n      // return val.substr(0,2) === 'id'\n    }\n  }\n}\n```\n## 自定义body/query/params..参数获取方法\n除了使用插件默认参数获取或配置全局paramGetter外，如果需要针对某个校验规则单独处理参数获取，可以给主函数传入自定义参数获取方法\n```\n// ./verify/users.js 针对Router =\u003e users 的校验规则\nimport verify from 'verify'\nexport default {\n  // verifyRule: 参考上文的校验规则示例\n  addUser: verify(verifyRule, {\n    body (req) {\n      return '您处理后的body中的所有参数'\n    },\n    query (req) {\n      return '您处理后的query中的所有参数'\n    }\n  })\n}\n```\n## 属性\n### beforeVerify\n校验前的hook 一般用于过滤或修改某些提交参数。参考上文 **全局配置**\n\n### onError\n校验不通过的hook 一般用于配置校验不通过时的返回信息。参考上文 **全局配置**\n\n### paramGetter\n校验插件获取req参数的方法配置 一般用于项目需要通过自己封装的方法获取参数。参考上文 **全局配置**\n\n### verifyBase\n本插件校验的核心方法来自[verify-base](https://github.com/aweiu/verify-base)\n```\n// 通过该方式获取verifyBase以使用其内置的各种校验方法\nconsole.log(verify.verifyBase('int')(0.5))\n// 拓展校验规则，具体可参考上方verify-base文档\n// 拓展之后你就可以像使用自带的校验规则（如：phone,number）那样使用你的yourRuleName\nverify.verifyBase('yourRuleName', (val, rule) =\u003e {\n  // 校验逻辑\n  return '校验不通过'\n})\n```\n### errMsg\n插件的默认校验不通过提示模版\n```\n{\n  number: {\n    common: '{mark}应为数字',\n    // \u003e\n    maxNumber: '{mark}不能大于{maxNumber}',\n    // \u003e=\n    maxNumber2: '{mark}应小于{maxNumber}',\n    // \u003c\n    minNumber: '{mark}不能小于{minNumber}',\n    // \u003c=\n    minNumber2: '{mark}应大于{minNumber}',\n    decimalLength: '{mark}最多为{decimalLength}位小数'\n  },\n  // 特殊类型\n  int: '{mark}仅接受整数',\n  phone: '手机号不正确',\n  idCard: '身份证号不正确',\n  bankCard: '银行卡号不正确',\n  verifyCode: '验证码错误',\n  email: '邮箱格式不正确',\n  common: {\n    empty: '{mark}不能为空',\n    length: '{mark}必须为{length}位',\n    minLength: '{mark}至少{minLength}位',\n    maxLength: '{mark}至多{maxLength}位',\n    mustBeNull: '{mark}参数不允许'\n  }\n}\n```\n您可以按照上述格式自定义您的错误提示\n```\nverify.errMsg = {}\n```\n也可以只修改某些项\n```\nverify.errMsg.int = '{mark}必须为整数'\n```\n## 方法\n### canBeNull (rules, options = {})\n用于批量给校验规则添加canBeNull属性 rules: 待处理的校验规则 options: 自定义处理规则\n```\nvar rules = {\n  body: {\n    name: '姓名',\n    age: {\n      mark: '年龄'\n      int: true,\n      maxNumber: 20\n    }\n  }\n}\n// 为rules批量添加canBeNull属性，并传入自定义处理规则\nverify.canBeNull(rules, {\n  body: {\n    // 添加sex参数的校验\n    sex: {\n      mark: '性别',\n      canBeNull: true\n    },\n    // 覆盖age参数的校验\n    age: {\n      mark: '年龄'\n      int: true,\n      maxNumber: 21\n    }\n  }\n})\n// 返回\n{\n  body: {\n    name: {\n      mark: '姓名',\n      canBeNull: true\n    },\n    age: {\n      mark: '年龄'\n      int: true,\n      maxNumber: 21\n    },\n    sex: {\n      mark: '性别',\n      canBeNull: true\n    }\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faweiu%2Fexpress-verify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faweiu%2Fexpress-verify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faweiu%2Fexpress-verify/lists"}