Почему внутри инструкции IF работает или не работает должным образом?

#node.js #lambda

#node.js #лямбда

Вопрос:

У меня есть функция для загрузки файла в 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 инструкцию.

Редактировать

Как я могу разрешить загрузку на S3 только файлов с расширениями PNG, JPG или JPEG? Если это что-то другое, чем эти расширения, я хочу вернуть ошибку, как показано выше.

Спасибо всем.

Комментарии:

1. Если filePrefix есть "blah" , то это НЕ какой-либо из случаев, и, следовательно, утверждение верно. Если это так, "png" то это НЕ "jpeg" так что условие по-прежнему выполняется. Если это так, то это НЕ "jpeg" — снова true. "png" Это условие никогда не может быть ложным.

2. jpg — это != png … итак, почему он должен выполнять оператор else

3. Я пропустил свой кофе этим утром… Спасибо, ребята! Имеет смысл.

4. filePrefix также немного сбивает с толку, поскольку префикс обычно появляется перед чем-либо еще, возможно, вам следует переименовать эту переменную fileExtension

5. Измените || s на amp;amp; s ==> Если это не «png», и это не «jpg», и это не «jpeg», тогда верните ошибку

Ответ №1:

Кажется, что ваша логика немного не в порядке!

В нынешнем виде вы проверяете, является ли расширение файла не «png» или не «jpg» или не «jpeg». Поскольку это никогда не может быть все 3, и тест должен возвращать true каждый раз.

Вы должны сделать одну из двух вещей.

  1. Измените || s на amp;amp; s так, чтобы: Если это не «png», и это не «jpg», и это не «jpeg», тогда верните ошибку
     if(fileExtension.toUpperCase() != 'png'.toUpperCase() amp;amp; fileExtension.toUpperCase() != 
     'jpeg'.toUpperCase() amp;amp; fileExtension.toUpperCase() != 'jpg'.toUpperCase()) {
        // return error
    } else {
        // process upload
    }
  

или,

  1. Инвертируйте логику и измените != на ==
     if(fileExtension.toUpperCase() == 'png'.toUpperCase() || fileExtension.toUpperCase() == 'jpeg'.toUpperCase() || fileExtension.toUpperCase() == 'jpg'.toUpperCase()) {
        // process upload
    } else {
        // return error
    }