express-validator:如何检查电子邮件 ID 数组?

express-validator : How to check for an Array of Email IDs?

假设我有一个 post 请求正文:

{
    "from":"mr.x@example.com",
    "recipient":[
        "john.doe@email.com",
        "ramesh.suresh@example.com",
        "jane.doe"
    ]
}

这是我的请求处理程序:

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

router.post(
    "/api/request",
    body("from").notEmpty().isEmail(),
    body("recipient").isArray({ min: 1 }),
    (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({ errors: errors.array() });
        }
        res.sendStatus(200)
    }
);

如何使用快速验证器验证“收件人”是否为电子邮件 ID 数组?现在我知道 isEmail() 检查电子邮件,isArray() 检查数组。我如何结合这两个来检查它是否是“电子邮件 ID 数组”?

您可以按以下方式组合这两个检查,使用 wildcards:

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

router.post(
    "/api/request",
    body("from").notEmpty().isEmail(),
    body("recipient").isArray({ min: 1 }),
    body("recipient.*").not().isArray().isEmail(), // Here lies the "magic" :)
    (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({ errors: errors.array() });
        }
        res.sendStatus(200)
    }
);

注意:您需要“.not().isArray()”,因为嵌套的电子邮件数组会通过检查