热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用expressvalidator验证输入字段中的输入是否可被数字整除或倍数?

如何使用express-validator验证输入字段中的输入是否可被数字整除或倍数?

如何使用 express-validator 验证输入字段中的输入是否可被数字整除或倍数?

原文:https://www . geesforgeks . org/如何验证输入字段中的输入是否可被使用快速验证器的数字整除或倍数整除/

在 HTML 表单中,我们经常需要不同类型的验证。验证现有电子邮件、验证密码长度、验证确认密码、验证为仅允许整数输入,这些都是验证的一些示例。在某个输入字段中,只允许是特定数字倍数的数字,即不允许有任何字母、特殊字符或不是特定数字倍数的数字。我们还可以使用 express-validator 中间件验证这些输入字段,以便只接受那些特定的数字。

安装快速验证器的命令:

npm install express-validator

使用快速验证器实现逻辑的步骤:


  • 安装快速验证中间件。

  • 创建一个 validator.js 文件来编码所有的验证逻辑。

  • 通过 validateInputField 验证输入:检查(输入字段名)和带有“.”的验证链

  • 通过将净化方法链接到带“.”的 toInt()上,净化输入以将其从字符串转换为整数

  • 在路由中使用验证名称(validateInputField)作为一个中间件,作为一个验证数组。

  • 从快速验证器中析构“验证结果”函数,用它来查找任何错误。

  • 如果发生错误,重定向到传递错误信息的同一页。

  • 如果错误列表为空,则允许用户访问后续请求。

注意:这里我们使用本地或自定义数据库来实现逻辑,同样的步骤也可以在 MongoDB 或 MySql 这样的常规数据库中实现逻辑。

示例:此示例说明了如何验证输入字段,以仅允许可被某个特定数字整除的数字。

文件名–index . js

java 描述语言

const express = require('express')
const bodyParser = require('body-parser')
const {validationResult} = require('express-validator')
const repo = require('./repository')
const { validateAmount } = require('./validator')
const formTemplet = require('./form')
const app = express()
const port = process.env.PORT || 3000
// The body-parser middleware to parse form data
app.use(bodyParser.urlencoded({extended : true}))
// Get route to display HTML form
app.get('/', (req, res) => {
  res.send(formTemplet({}))
})
// Post route to handle form submission logic and
app.post(
  '/info',
  [validateAmount],
  async (req, res) => {
    const errors = validationResult(req)
    if(!errors.isEmpty()){
      return res.send(formTemplet({errors}))
    }
    const {name, ano, pin, amount} = req.body
    // New record
    await repo.create({
      'Account Name':name,
      'Account Number':ano,
      'Secret Password':pin,
      'Amount':amount,
    })
    res.send(
'Transaction successful!')
})
// Server set to run
app.listen(port, () => {
  console.log(`Server start on port ${port}`)
})

Filename–repository . js:该文件包含创建本地数据库并与之交互的所有逻辑。

java 描述语言

// Importing node.js file system module
const fs = require('fs')
class Repository {
  constructor(filename) {
    // Filename where datas are going to store
    if (!filename) {
      throw new Error(
'Filename is required to create a datastore!')
    }
    this.filename = filename
    try {
      fs.accessSync(this.filename)
    } catch(err) {
      // If file not exist it is created
      // with empty array
      fs.writeFileSync(this.filename, '[]')
    }
  }
  // Get all existing records
  async getAll(){
    return JSON.parse(
      await fs.promises.readFile(this.filename, {
        encoding : 'utf8'
      })
    )
  }
  // Create new record
  async create(attrs){
    // Fetch all existing records
    const records = await this.getAll()
    // All the existing records with new
    // record push back to database
    records.push(attrs)
    await fs.promises.writeFile(
      this.filename,
      JSON.stringify(records, null, 2)  
    )
    return attrs
  }
}
// The 'datastore.json' file created at runtime
// and all the information provided via signup form
// store in this file in JSON formet.
module.exports = new Repository('datastore.json')

Filename–form . js:该文件包含显示表单提交数据的逻辑。

java 描述语言

const getError = (errors, prop) => {
  try {
    return errors.mapped()[prop].msg
  } catch (error) {
    return ''
  }
}
module.exports = ({errors}) => {
  return `



  'https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.0/css/bulma.min.css'>
  


  


    

      

        
          

            

              
            

                          name='name' placeholder='Vinit singh'
              for='name'>
          

          

            

              
            

                          name='ano' placeholder='Account Nnumber'
              for='ano'>
          

          

            

              
            

                          placeholder='XXXXXX' for='pin'>
          

          

            

              
            

                          placeholder='Amount in multiple of 100'
              for='amount'>
            


              ${getError(errors, 'amount')}
            


          

          

            
          

        
      

    

  



  `
}

Filename–validator . js:该文件包含所有验证逻辑(验证输入字段只允许大写字母的逻辑)。

java 描述语言

const {check} = require('express-validator')
const repo = require('./repository')
module.exports = {
  validateAmount : check('amount')
    // To delete leading and trailing space
    .trim()
    // Convert amount to integer from string
    .toInt()
    // Validate name to accept only a
    // number divisible by 'num'
    .isDivisibleBy(100)
    // Custom message
    .withMessage('Must be multiple of 100')  
}

文件名–package . JSON

package.json 文件

数据库:

数据库

输出:

当金额输入字段不能被 100 整除或 100 的倍数时,尝试提交表单数据

试图提交金额输入字段不能被 100 整除或 100 的倍数的表单数据时的响应

当金额输入字段可被 100 整除或为 100 的倍数时,尝试提交表单数据

尝试提交金额输入字段可被 100 整除或倍数的表单数据时的响应

成功提交表单后的数据库:

成功提交表单后的数据库

注意:我们在 form.js 文件中使用了一些布尔玛类(CSS 框架)来设计内容。


推荐阅读
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了MongoDB中的覆盖索引查询(Covered Queries)的概念和使用方法。当查询的查询条件和查询计划中只包含索引属性时,MongoDB可以高效地执行查询操作,无需扫描documents或者将documents调入内存中。覆盖索引查询的条件是查询中的所有属性都是索引的一部分,并且查询结果中的属性值都在同一个索引中。通过使用覆盖索引查询,MongoDB可以直接从RAM中的索引中获取数据,比通过扫描文档读取数据要快得多。本文还提供了一个使用覆盖索引查询的示例。 ... [详细]
author-avatar
美美2012的小幸福
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有