NodeJS 正文错误未触发express验证程序

k7fdbhmy  于 2023-01-16  发布在  Node.js
关注(0)|答案(1)|浏览(120)

验证中间件代码在我创建的代码中没有被触发,尽管所有的日志标记都被执行了。

const { check, validationResult } = require("express-validator");

module.exports = {
    validateUsers(req, res, next) {
        if (req.method === "POST") {
            console.log(req.body.email);
            check(["email", "Must consist only of letters."]).isEmail();
        }

        const errors = validationResult(req);

        if (!errors.isEmpty()) {
            return res.json(errors);
        }  else {
            return next();
        }
    }
}

我试过用check发送reqreq.body,以及用两个选项发送body。控制台日志显示提供了一个非电子邮件字符串,我试过其他字段和其他(失败的)值。
有人能给我指出一个有用的方向吗?我用过checkBody的旧版本,但我被这些卡住了。我一直在忙app.js,但它现在没有未注解的代码。

hl0ma9xz

hl0ma9xz1#

check返回一个中间件,但您没有使用它,也没有向它传递所需的参数。

const { check, validationResult } = require("express-validator");

module.exports = {
    validateUsers(req, res, next) {
        if (req.method === "POST") {
            console.log(req.body.email);
            const middleware = check(["email", "Must consist only of letters."]).isEmail();
            middleware(req, res, next)
           
        }

        const errors = validationResult(req);

        if (!errors.isEmpty()) {
            return res.json(errors);
        }  else {
            return next();
        }
    }
}

我的建议是,这有点不符合人体工程学。它甚至可能不工作,因为从check返回的中间件可能调用next,然后您的代码就没有意义了。它的设计是为了不同的使用。它可能会更干净,如:

const { body, validationResult } = require("express-validator");

module.exports = {
    validateUsers: [
            body(["email", "Must consist only of letters."]).isEmail(),
            (req, res, next) => {
                const errors = validationResult(req);

                if (!errors.isEmpty()) {
                    return res.json(errors);
                }  else {
                    return next();
                }
            }
        ]
}

然后像这样使用:

app.post('/thing', validateUsers, (req, res, next) => {
   // you'd get here only if there were no issues
})

相关问题