フォーム検証の原則:フロントエンド検証が補足され、バックエンド検証がメインであり、バックエンドはフロントエンドによって送信されたコンテンツを決して信頼してはなりません。
実際の開発では、フロントエンドとバックエンドの両方がフォームデータの有効性を検証する必要があり、バックエンドデータの正当性検証の最後のゲートとして、違法なデータを傍受する上で重要な役割を果たします。
if…else…の形式を使用してデータの正当性を検証するだけでは、効率が悪く、エラー率が高く、保守が不十分です。したがって、サードパーティのデータ検証モジュールを使用して、エラー率を減らし、検証の効率と保守性を向上させ、バックエンドプログラマーがコアビジネスロジックの処理により集中できるようにすることをお勧めします。
1. @ hapi / joiパッケージをインストールし、次の形式で運ばれる各データ項目の検証ルールを定義します。
npm install @hapi/joi@17.1.0
如果出现报错 直接下载joi
npm i joi
2. @ escook / express-joiミドルウェアをインストールして、フォームデータを自動的に検証します。
npm i @escook/express-joi
3. jsファイルを作成し、フォーム検証のルールを設定します
//导入joi包
const joi = require('@hapi/joi')
/**
* string() 值必须是字符串
* alphanum() 值只能是包含 a-zA-Z0-9 的字符串
* min(length) 最小长度
* max(length) 最大长度
* required() 值是必填项,不能为 undefined
* pattern(正则表达式) 值必须符合正则表达式的规则
*/
// 用户名的验证规则
const username = joi.string().alphanum().min(1).max(10).required()
// 密码的验证规则
const password = joi
.string()
.pattern(/^[\S]{6,12}$/)
.required()
// 注册和登录表单的验证规则对象
exports.reg_login_schema = {
// 表示需要对 req.body 中的数据进行验证
body: {
username,
password,
},
}
3.インポートしてルーティングファイルで使用する
// 2. 导入需要的验证规则对象
const {
reg_login_schema } = require('../schema/user')
// 注册新用户
// 3. 在注册新用户的路由中,声明局部中间件,对当前请求中携带的数据进行验证
// 3.1 数据验证通过后,会把这次请求流转给后面的路由处理函数
// 3.2 数据验证失败后,终止后续代码的执行,并抛出一个全局的 Error 错误,进入全局错误级别中间件中进行处理
router.post('/reguser', expressJoi(reg_login_schema), userHandler.regUser)