当前位置: 首页 > article >正文

Node.js中使用Joi 和 express-joi-validation进行数据验证和校验

在进行项目开发的过程中,很多时候系统对用户输入的数据会进行严格校验的,通常我们会以“前端校验为辅,后端校验为主”的思想进行校验处理。

后端接口校验的时候,是只能一直使用if进行逻辑判断呢,还是有更加方便的方法呢?很显然,一直使用if的话,会使得我们的代码可读性变差和不好维护。

在Node.js开发中,Joi 和 express-joi-validation 是两个非常有用的库,用于数据验证和校验。Joi 是一个强大的对象模式描述语言和验证器,而 express-joi-validation 是 Joi 的一个中间件,用于将 Joi 的验证功能集成到 Express 应用中。

Joi

Joi 是一个用于对象架构验证的库。它允许你定义对象的结构,包括类型、约束、默认值等,然后验证一个对象是否符合这个结构。

安装 Joi

npm install joi

使用 Joi 进行数据验证

const Joi = require('joi');
// 定义一个 schema
const userSchema = Joi.object({
    username: Joi.string().required(),
    password: Joi.string().min(6).required(),
    age: Joi.number().integer().min(18).required()
});
// 验证数据
const user = {
    username: 'testuser',
    password: 'password123',
    age: 25
};
const { error, value } = userSchema.validate(user);
if (error) {
    console.error('Validation failed:', error.details);
} else {
    console.log('Validation succeeded:', value);
}

express-joi-validation

express-joi-validation 是一个中间件,用于将 Joi 验证集成到 Express 应用中。它允许你定义路由参数、请求体和查询参数的验证规则。

安装 express-joi-validation

npm install express-joi-validation

使用 express-joi-validation 进行路由验证

const express = require('express');
const { validateRequest, validateBody, validateParams, validateQuery } = require('express-joi-validation');
const Joi = require('joi');
const app = express();
// 定义 schema
const userSchema = Joi.object({
    username: Joi.string().required(),
    password: Joi.string().min(6).required()
});
const userIdSchema = Joi.object({
    id: Joi.number().integer().required()
});
// 路由使用 validateBody 进行请求体验证
app.post('/users', validateBody(userSchema), (req, res) => {
    res.send('User created');
});
// 路由使用 validateParams 进行路由参数验证
app.get('/users/:id', validateParams(userIdSchema), (req, res) => {
    res.send(`User ID: ${req.params.id}`);
});
// 路由使用 validateQuery 进行查询参数验证
app.get('/users', validateQuery(Joi.object({
    limit: Joi.number().integer().min(1).max(100).default(10)
})), (req, res) => {
    res.send(`Users limit: ${req.query.limit}`);
});
// 捕获验证错误并返回响应
app.use((err, req, res, next) => {
    if (err.isJoi) {
        return res.status(400).send({
            message: err.details[0].message
        });
    }
    next(err);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

总结

Joi 是一个强大的对象模式描述语言和验证器,用于定义和验证对象结构。

express-joi-validation 是一个中间件,将 Joi 的验证功能集成到 Express 应用中,支持对请求体、路由参数和查询参数的验证。

通过这两个库的结合使用,你可以轻松地在 Express 应用中实现数据验证,提高代码的健壮性和安全性。


http://www.kler.cn/a/469085.html

相关文章:

  • c++领域展开第十幕——类和对象(内存管理——c/c++内存分布、c++内存管理方式、new/delete与malloc/free区别)超详细!!!!
  • 【数电尾灯设计】2022-8-16
  • Ant Design Pro写项目的总结经验(react)
  • salesforce 可以为同一个简档的同一个 recordtype 的对象设置多种页面布局吗
  • JavaScript语言的编程范式
  • STM32的LED点亮教程:使用HAL库与Proteus仿真
  • Win32汇编学习笔记04.重定位与汇编引擎
  • ubuntu 创建服务、查看服务日志
  • Linux-Ubuntu之RTC实时时钟显示
  • 使用 ThinkPHP 和 Vue.js 开发现代 Web 应用的指南
  • Swift Protocols(协议)、Extensions(扩展)、Error Handling(错误处理)、Generics(泛型)
  • c++第13课
  • VisualRules规则引擎语法介绍
  • Structured-Streaming集成Kafka
  • vue3组件化开发优势劣势分析,及一个案例
  • spring mvc源码学习笔记之二
  • 在 C# 中合并和解析相对路径
  • 探索 INFINI Console:提升 Elasticsearch 管理效率的新利器
  • 鸿蒙NEXT使用request模块实现本地文件上传
  • Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具)
  • 某xx到家app逆向
  • 【新人系列】Python 入门(二十三):锁
  • 3.5 字典树(Trie)与后缀树
  • 【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事?
  • javafx fxml模式下 menu菜单增加图标
  • docker搭建gitlab和jenkins