简介
在前端开发过程中,表单验证是一个不可避免的步骤。而使用 express-validator
进行验证是一种非常流行的方式。不过,对于一些需要验证多个表单的项目,我们并不能将所有的验证逻辑写入同一个中间件函数中。
这种情况下,我们可以使用 express-validator-proxy
这个 npm 包。本文将介绍如何使用这个包来简化和优化验证逻辑。
安装和使用
首先,在项目中安装
express-validator
和express-validator-proxy
:npm install --save express-validator express-validator-proxy
在
server.js
文件中引入express-validator
和express-validator-proxy
:const express = require('express'); const { check, validationResult } = require('express-validator'); const validatorProxy = require('express-validator-proxy'); const app = express();
定义一个验证数组,并将其传递给
validatorProxy
:-- -------------------- ---- ------- ----- -------- - - ------------------------- ------------------------- -------------------- ---- -- --- -- ------------------------ --------- --------------- ----- ---- -- - ----- ------ - ---------------------- -- ------------------- - ------ ---------------------- ------- -------------- --- - -- -------- ---
在上面的示例中,我们首先定义了一个验证数组
validate
,包含了三个表单项的验证逻辑。然后在app.post
中,我们将该数组直接传递给validate
参数,代表所有表单项都需要执行验证。接着,我们在
app.post
的参数列表中再次传入validatorProxy
,表示需要将validate
数组中的验证逻辑代理到实际执行验证的中间件函数中。最后,我们在
app.post
的回调函数中,检查表单验证是否通过。如果没有通过,则返回422
状态码和错误信息数组。如果通过,则继续处理表单提交的逻辑。
深入理解
在上面的示例中,我们使用 experss-validator-proxy
简化了验证逻辑。那么这个包是如何实现的呢?
实际上,express-validator-proxy
在内部创建了一个中间件函数 validate
来代替我们手动调用 check
函数进行验证。该中间件函数接受一个验证数组作为参数,循环遍历该数组,并将每一项验证逻辑传递给 check
函数。具体代码如下:
-- -------------------- ---- ------- -------- ------------- ---- ----- - --------------------------- - --------------------------- -- --- ----- --------- - --------- -- -------- -- --- ----- -------- - ----------------------------- --- -------- - --- ----- ------ - ----- ----- - ---------------- -- ------------ - ------ - ----- -------- - ------------------------------------ -- ----------- - --------- - ----- ------------ - ---------------------- -- -------------------------------------------- ------------- -- -------- - ---------------- ------------------------- -------------- -- - ----- -------------- - ----------------------- -- ----------------------- - --------------------------- - ----------------------------------- --------------- -- - -- ------------- -- - ----------------------------- -- - ------- --- -
在 validate
函数中,我们首先从 req
中获取到验证数组,然后循环遍历其中的 check
函数。在遍历的过程中,我们将每一个 check
函数返回的验证错误对象添加到 req.__validationErrorsToAdd
数组中。注意,这里的 req
对象是 Express 中的请求对象,可以使用中间件函数添加自定义属性。
在 validate
函数执行完毕后,Express 会继续调用下一个中间件函数。这时, req.__validationErrorsToAdd
已经被填充了所有的验证错误对象。我们只需要将 req.__validationErrorsToAdd
内的错误对象合并到 validationResult(req)
返回的错误数组中即可。
总结
express-validator-proxy
的作用是将 check
函数中的验证逻辑代理到实际执行验证的中间件函数中,让验证逻辑变得更加简洁和可维护。在使用过程中,需要注意引入和传递验证数组的顺序,以及验证错误对象的合并方式。这些细节都可以在官方文档中找到对应的说明。
使用 express-validator-proxy
,能够有效地提高开发效率,减少出错的概率。因此,在使用 express-validator
进行表单验证时,可以考虑使用这个 npm 包来简化验证逻辑。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056c8c81e8991b448e6050