程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了快速验证器v4的检查功能中的访问请求正文大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决快速验证器v4的检查功能中的访问请求正文?

开发过程中遇到快速验证器v4的检查功能中的访问请求正文的问题如何解决?下面主要结合日常开发的经验,给出你关于快速验证器v4的检查功能中的访问请求正文的解决方法建议,希望对你解决快速验证器v4的检查功能中的访问请求正文有所启发或帮助;

摆弄了一段时间后,我找到了一种使用自定义验证器来实现此目的的方法。传递给定制方法的验证器函数接受包含请求主体的对象:

router.post(
    "/submit",
    [
    // Check valIDity
    check("email", "InvalID email").isEmail(),
    check("password", "invalID password")
        .isLength({ min: 4 })
        .custom((value,{req, loc, path}) => {
            if (value !== req.body.confirmPassword) {
                // trow error if passwords do not match
                throw new Error("Passwords don't match");
            } else {
                return value;
            }
        })
    ],
    (req, res, next) => {
        // return valIDation results
        const errors = valIDationResult(req);

        // do stuff
    });

解决方法

我刚刚开始使用带有express-validator的express.js来验证一些输入数据,但是在版本4.0.0中引入的新check
API中访问请求正文时遇到问题。

在较早的版本中,您只是在主体解析器之后的某处在app.js中添加了express-validator作为中间件:

// ./app.js
const bodyParser = require("body-parser");
const expressValidator = require("express-validator");

const index = require("./routes/index");

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());

然后在索引路由中,我可以检查post方法的最终回调函数中的字段。

// ./routes/index.js
const express = require("express");
const router = express.Router();

router.post("/submit",(req,res,next) => {
    // check email
    req.check('email','Invalid email address').isEmail()
    // check if password is equal to password confirmation
    req.check('password','Invalid password')
    /* Access request body to compare password 
    field with password confirmation field */
    .equals(req.body.confirmPassword)

    // get errors
    const errors = req.validationErrors();

    // do stuff
});

像在此示例中一样,我可以轻松地检查表单的密码字段和密码确认字段的值是否相等。但是,从版本4开始,它们具有新的API,要求您直接在路由器文件中加载express-
validator,并在post方法中的最终回调之前将检查函数作为函数数组传递,如下所示:

// ./routes/index.js
const express = require("express");
const router = express.Router();
const { check,validationResult } = require("express-validator/check");

router.post(
    "/submit",[
        // Check validity
        check("email","Invalid email").isEmail(),// Does not work since req is not defined
        check("password","invalid password").isLength({ min: 4 })
        .equals(req.body.confirmPassword) // throws an error
    ],next) => {
    // return validation results
    const errors = validationResult(req);

    // do stuff
});

由于未定义req,因此无法使用。因此,我的格调是:如何访问check()链中的请求对象,以使用新的express-validator
API比较两个不同的字段?首先十分感谢!

大佬总结

以上是大佬教程为你收集整理的快速验证器v4的检查功能中的访问请求正文全部内容,希望文章能够帮你解决快速验证器v4的检查功能中的访问请求正文所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: