express - 发送文件时使用 Joi 进行表单验证失败
问题描述
我有端点,我在其中发布一些数据以创建用户。我正在使用 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"
}
如果您想知道我是否发送正确的电子邮件,我正在发送实际有效的电子邮件。我肯定在这里遗漏了一些东西,请告诉我。
解决方案
实际上一切都很好,事实证明,在 Postman 的表单数据中,有一个我没有注意到的额外空间。在开始时删除多余的空间解决了验证错误。
推荐阅读
- typo3 - TYPO3 ObjectStorage + 瞬态域对象
- python - sklean 管道中的 set_params() 不能与 TransformTargetRegressor 一起使用
- python - 为什么这些算法的执行时间不同?
- list - 从下拉列表中选择并在颤动中同时更新相同的列表
- r - 返回字符串模式匹配加上模式前后的文本
- unit-testing - RestTemplate 的模拟是用 spring boot 2.x 抛出空指针异常
- c++ - 无法使用 QSortFilterProxyModel 按角色排序按 QDateTime 对模型进行排序
- python - 关于使用 seaborn 时位置参数的错误消息
- python - 使用 gensim 4.0.0 与预先训练的词向量相交的过程
- reactjs - 为什么我在 React JS 中出现 WebSdk 错误?