Express 发送文件时,Joi表单验证失败

Express 发送文件时,Joi表单验证失败,express,multer,joi,Express,Multer,Joi,我有一个端点,在这里我发布一些数据来创建一个用户。我正在用Joi验证请求主体。但当我使用Postman发布时,验证失败 在这里,类似于验证函数 const checkData = (data) => { const schema = Joi.object({ image: Joi.string(), greeting: Joi.string().valid("Hello World!", "Welcome").

我有一个端点,在这里我发布一些数据来创建一个用户。我正在用Joi验证请求主体。但当我使用Postman发布时,验证失败

在这里,类似于验证函数

const checkData = (data) => {
    const schema = Joi.object({
        image: Joi.string(),
        greeting: Joi.string().valid("Hello World!", "Welcome").required(),
        email: Joi.string().email().required(),
    });

    return schema.validateAsync(data);
};
这是multer的设置

const storage = multer.diskStorage({
    destination: (req, file, callback) => {
        callback(null, "./upload/");
    },
    filename: (req, file, callback) => {
        callback(null, Date.now().toString() + "_" + file.originalname);
    },
});

const fileFilter = (req, file, callback) => {
    if (file.mimetype === "image/jpeg" || file.mimetype === "image/png") {
        callback(null, true);
    } else {
        callback(null, false);
    }
};

const upload = multer({ storage, fileFilter });
这是我的路线

router.post("/create/:whatever", upload.single("image"), async (req, res) => {
    try {
        await checkData(req.body);
        res.send(req.params.whatever);
    } catch (err) {
        res.send({ message: err.details[0].message });
    }
});
我得到的错误回答是

{
    "message": "\"email\" must be a valid email"
}

如果您想知道我是否发送了正确的电子邮件,我会发送一封实际有效的电子邮件。我肯定这里遗漏了什么,请让我知道。

事实上一切都很好,结果是,在邮递员的表单数据中有一个额外的空间,我没有注意到。在开始时删除多余的空间解决了验证错误。

您可以尝试在
checkData(…)
调用之前记录
req.body
,查看请求body中的内容谢谢,应该早点检查,结果是,一切都是正确的,但我有额外的空间在电子邮件字段的开始,这是给我这个验证错误。