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

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

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

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

Joi

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

安装 Joi

javascript 复制代码
npm install joi

使用 Joi 进行数据验证

javascript 复制代码
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

javascript 复制代码
npm install express-joi-validation

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

javascript 复制代码
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 应用中实现数据验证,提高代码的健壮性和安全性。

相关推荐
万邦科技Lafite1 小时前
京东按图搜索京东商品(拍立淘) API (.jd.item_search_img)快速抓取数据
开发语言·前端·数据库·python·电商开放平台·京东开放平台
Never_Satisfied3 小时前
在JavaScript / Node.js / 抖音小游戏中,使用tt.request通信
开发语言·javascript·node.js
一只小透明啊啊啊啊4 小时前
Java Web 开发的核心组件:Servlet, JSP,Filter,Listener
java·前端·servlet
你的人类朋友5 小时前
设计模式有哪几类?
前端·后端·设计模式
Yeats_Liao5 小时前
Go Web 编程快速入门 10 - 数据库集成与ORM:连接池、查询优化与事务管理
前端·数据库·后端·golang
啃火龙果的兔子5 小时前
前端八股文react篇
前端·react.js·前端框架
打小就很皮...5 小时前
React 实现 i18next 中英文切换集成
前端·react.js·i18next
拉不动的猪5 小时前
函数组件和异步组件
前端·javascript·面试
淮北4946 小时前
html + css +js
开发语言·前端·javascript·css·html
你的人类朋友6 小时前
适配器模式:适配就完事了bro!
前端·后端·设计模式