0

req.files がイメージとして入ってくるかどうかをチェックするためのカスタム ルールを追加するために、expressValidator を拡張しようとしています。Express-validator は node-validator を使用し、node-validator は入力パラメーターのリクエスト本文を解析するため:

req.body.emailとして渡されるreq.assert('email', 'Please enter a valid Email').isEmail()ため、express-validator で渡されるものはすべてreq.assert()パラメーター名である必要があります。

私がここに書いた私の方法があるので、これは私が問題に遭遇している場所です:

  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' } 
}
4

1 に答える 1