我正在尝试扩展 expressValidator 以添加我的自定义规则,以检查 req.files 是否作为图像进入。因为 express-validator 使用的是 node-validator,而 node-validator 会解析请求体中的入参:
req.body.email
传入 as req.assert('email', 'Please enter a valid Email').isEmail()
,因此req.assert()
使用 express-validator 传入的任何内容都需要是参数名称。
这是我遇到问题的地方,因为我有我在这里写的方法:
expressValidator.Validator.prototype.isImage = function() {
var type = this.str,
allowedTypes = ['gif', 'jpg', 'jpeg', 'png'],
allowed = false;
for (var i = 0; i < allowedTypes.length; i++) {
if (type.indexOf(allowedTypes[i]) !== -1) {
allowed = true;
}
}
if (!allowed) {
this.error(this.msg);
}
return this;
};
但我不能只做,req.assert('avatar', 'Please enter a valid image type').isImage()
因为首先,我需要传入req.files.avatar.type
. 使用req.assert()
时,第一个参数需要一个字符串。
如果我给它字符串:例如req.assert(req.files.avatar.type, 'Please enter a valid image type').isImage()
在我的错误消息对象中,它会显示:
{ 'image/png':
{ param: 'image/png',
msg: 'Please enter a valid image',
value: undefined }
}
什么时候应该显示这个:
{ 'avatar':
{ param: 'avatar',
msg: 'Please enter a valid image',
value: 'image/png' }
}