使用R.allPass/anyPass 避免驗證多條件的If 語句

Node:
實現以下一段驗證類型的函數,
主要檢驗:

  1. 以及此文件是否存在
  2. 上傳的文件是否為xlsx文件格式
  3. 文件大小<8M
  4. 前端中上傳的表單name為 'xlsxfile'的文件

只有當條件均符合時才能通過校驗返回True值。

前提已知

  1. 使用multer中間件,上傳的 file返回數據結構為:
    # 
    const file = {
      fieldname: 'xlsxfile',
      originalname: 'Y~Z.xlsx',
      encoding: '7bit',
      mimetype:
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      destination: 'D:\\Code\\upload_TEMP',
      filename: 'data.xlsx',
      path: 'D:\\Code\\upload_TEMP\\data.xlsx',
      size: 9848,
    };

一般寫法

  1. 憋一口氣的寫法:
import {existsSync} from 'fs';

const validate =(file)=>{
    const xlsxMIME =
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';

    if(existsSync(file)&&file.mimetype===xlsxMIME&&file.size<=8*1024*1024&&file.fieldname!=='xlsxfile'){
        return true;
    }
    return false;
}
  1. n連發if判斷寫法:
import {existsSync} from 'fs';

const validate =(file)=>{
    const xlsxMIME =
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';

    if(!existsSync(file)){
        return false;
    }

    if(file.mimetype!==xlsxMIME){
        return false;
    }

    if(file.size>=8*1024*1024){
        return false;
    }

    if(file.fieldname!=='xlsxfile'){
        return false;
    }
    return true;
}

優雅的寫法

使用 R.allPass 方法

import { existsSync } from 'fs';

const validate = (file) => {
  const xlsxMIME =
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  const validRules = [
    (file) => existsSync(file.path),
    (file) => file.mimetype === xlsxMIME,
    (file) => file.size<=8*1024*1024,
    (file) => file.fieldname === 'xlsxfile'
  ];
  return R.allPass(validRules)(file);
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,748評論 1 45
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,178評論 6 13
  • 概要 64學時 3.5學分 章節安排 電子商務網站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,337評論 0 3
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,837評論 0 11
  • 無論給誰機會 都不能不給自己機會 我的人生這么短 我只能認認真真愛自己一回 繩索斷了,船沉沒了 人沖散了,心不亂了...
    海上收音機閱讀 78評論 0 0