node.js - IF ステートメント内で OR が期待どおりに機能しないのはなぜですか?

okwaves2024-01-25  10

S3 にファイルをアップロードする機能があり、PNG および (JPG、JPEG) 画像のみのアップロードを許可したいと考えています。次のチェックを追加しました。

 if(fileExtension.toUpperCase() != 'png'.toUpperCase() || fileExtension.toUpperCase() != 
 'jpeg'.toUpperCase() || fileExtension.toUpperCase() != 'jpg'.toUpperCase()) {
 return {
        statusCode: 500,
        body: JSON.stringify("Not a valid capture format.  Capture upload only accepts PNG and 
  (JPG,JPEG)"),
     };
 }
 else {
  // Upload capture
}

有効なキャプチャ形式であるはずであるにもかかわらず、有効なキャプチャ形式ではないことを示す以下のエラー メッセージが返されます。たとえば、filePrefix は jpg なので、else ステートメントに入ることが期待されます。

編集

拡張子が PNG、JPG、または JPEG のファイルのみを S3 にアップロードできるようにするにはどうすればよいですか?これらの拡張子以外の場合は、上記のようにエラーを返したいと考えています。

皆さん、ありがとう。

1

filePrefix が「なんとなく」の場合その場合、どのケースにも当てはまらないため、このステートメントは true になります。 「png」の場合は、その場合、それは「jpeg」ではありません。したがって、条件は依然として true です。 「jpeg」の場合、「png」ではありません。 -やはり本当です。この条件が false になることはあり得ません。

– VLAZ

2020 年 9 月 3 日 9:12

jpg は != png ... では、なぜ else ステートムを実行する必要があるのでしょうかエント

– グリフロ

2020 年 9 月 3 日 9:12

2

今朝はコーヒーを飲みそびれました...ありがとう!完全に理にかなっています。

– アレクサンダー・ゾリック

2020 年 9 月 3 日 9:14

filePrefix も、通常、プレフィックスが他のものより前に来るため、少し混乱します。おそらく、その変数の名前を fileExtension に変更する必要があります。

– フージ

2020 年 9 月 3 日 9:18

1

|| を &&s ==> に変更します。 「png」でない場合は、 「jpg」ではありません。そしてそれは「jpeg」ではありません。その後、エラーを返します

– フージ

2020 年 9 月 3 日 9:23

----------------------------------

あなたの論理は少し間違っているようです。

現状では、ファイル拡張子が「png」でないかどうかをチェックしています。 「jpg」ではないのかまたは「jpeg」ではありません。 3 つすべてになることはあり得ず、テストは毎回 true を返す必要があるためです。

2 つのうちの 1 つを行う必要があります。

|| を &&s に変更して、次のようにします。それは「jpg」ではありません。そしてそれは「jpeg」ではありません。その後エラーを返します
    if(fileExtension.toUpperCase() != 'png'.toUpperCase() && fileExtension.toUpperCase() != 
     'jpeg'.toUpperCase() && fileExtension.toUpperCase() != 'jpg'.toUpperCase()) {
        // return error
    } else {
        // process upload
    }

または、

ロジックを反転し、!= を == に変更します。
    if(fileExtension.toUpperCase() == 'png'.toUpperCase() || fileExtension.toUpperCase() == 'jpeg'.toUpperCase() || fileExtension.toUpperCase() == 'jpg'.toUpperCase()) {
        // process upload
    } else {
        // return error
    }

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。