El uso del paquete @hapi/joi y el middleware @escook/express-joi para manejar la validación de formularios en nodejs

El principio de verificación de formulario: la verificación de front-end se complementa, la verificación de back-end es la principal, el back-end nunca debe confiar en ningún contenido enviado por el front-end.
En el desarrollo real, tanto el front-end como el back-end La necesidad final de verificar la validez de los datos del formulario y el back-end Como última puerta de verificación de la legitimidad de los datos, desempeña un papel vital en la interceptación de datos ilegales.
El simple uso del formulario if…else… para verificar la legitimidad de los datos es ineficiente, tiene una alta tasa de error y está mal mantenido. Por lo tanto, se recomienda utilizar un módulo de verificación de datos de terceros para reducir la tasa de error, mejorar la eficiencia y la capacidad de mantenimiento de la verificación y permitir que los programadores de back-end se concentren más en el procesamiento de la lógica empresarial central.

1. Instale el paquete @hapi/joi y defina las reglas de validación para cada elemento de datos incluido en el formulario:

npm install @hapi/joi@17.1.0
如果出现报错  直接下载joi  
npm i joi

2. Instale el middleware @escook/express-joi para validar automáticamente los datos del formulario:

npm i @escook/express-joi

3. Cree un archivo js y establezca las reglas para la validación de formularios

//导入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. Importación y uso en archivos de enrutamiento

// 2. 导入需要的验证规则对象
const {
    
     reg_login_schema } = require('../schema/user')
// 注册新用户
// 3. 在注册新用户的路由中,声明局部中间件,对当前请求中携带的数据进行验证
// 3.1 数据验证通过后,会把这次请求流转给后面的路由处理函数
// 3.2 数据验证失败后,终止后续代码的执行,并抛出一个全局的 Error 错误,进入全局错误级别中间件中进行处理
router.post('/reguser', expressJoi(reg_login_schema), userHandler.regUser)

Supongo que te gusta

Origin blog.csdn.net/weixin_45822938/article/details/123255970
Recomendado
Clasificación