vue axios 请求过滤空值

过滤判断请求参数中是否是有字符串、空对象、空数组、null、undefined、NaN中的一个,不包含数字0


一、npm安装 lodash 包

二、request.js 请求拦截配置

point:

1、请求拦截器中添加对 params / data 传参的空值判断

2、针对文件上传类的接口,需要屏蔽空值校验,否则会出错。------ 如在文件上传类的接口当中添加 noEmptyCheck 字段,过滤校验。

复制代码
import axios from 'axios';
import { pickBy } from 'lodash';
import { isEmpty } from '@/utils/utils';

// 创建 axios 实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL,
  // 超时
  timeout: 30000
});

// 添加请求拦截器
service.interceptors.request.use(
  (config) => {
    // 是否需要设置 token,如果请求中自带了Authorization,就不向cookie中取
    const isToken = !!(config.headers || {}).Authorization;
    // 在发送请求之前做些什么 token
    if (getToken() && !isToken) {
      config.headers['Authorization'] = 'Bearer ' + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
    }


    // 传参时如果为空或null,不传该字段
    // 【注】:这里不用lodash的isEmpty,因为空格和数字0无法正确判断
    if(!config.noEmptyCheck) {
        if(config.params) {
          config.params = pickBy(config.params, parameter => !isEmpty(parameter));
        }
        if(config.data) {
          config.data = pickBy(config.data, parameter => !isEmpty(parameter));
        }
    }
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 导出 axios 实例
export default service;

/**
 * 判断某个值是否是空字符串、空对象、空数组、null、undefined、NaN中的一个,不包含数字0
 * @param {*} val
 */
export function isEmpty(val) {
  let flag = false;
  const type = Object.prototype.toString.call(val);

  switch (type) {
  // 空字符串
  case '[object String]':
    if(val.trim() === '') {
      flag = true;
    }
    break;
    // null
  case '[object Null]':
    flag = true;
    break;
    // undefined
  case '[object Undefined]':
    flag = true;
    break;
    // NaN
  case '[object Number]':
    if(isNaN(val)) {
      flag = true;
    }
    break;
    // 空数组
  case '[object Array]':
    if(val.length === 0) {
      flag = true;
    }
    break;
    // 空对象
  case '[object Object]':
    if(Object.keys(val).length === 0) {
      flag = true;
    }
    break;
  }

  return flag;
}
相关推荐
冴羽1 小时前
为什么在 JavaScript 中 NaN !== NaN?背后藏着 40 年的技术故事
前端·javascript·node.js
久爱@勿忘1 小时前
vue下载项目内静态文件
前端·javascript·vue.js
前端炒粉1 小时前
21.搜索二维矩阵 II
前端·javascript·算法·矩阵
不爱吃糖的程序媛2 小时前
Electron 应用中的系统检测方案对比
前端·javascript·electron
pe7er2 小时前
用高阶函数实现递归:从匿名函数到通用递归生成器
前端·javascript
Jonathan Star3 小时前
NestJS 是基于 Node.js 的渐进式后端框架,核心特点包括 **依赖注入、模块化架构、装饰器驱动、TypeScript 优先、与主流工具集成** 等
开发语言·javascript·node.js
矢心3 小时前
setTimeout 和 setInterval:看似简单,但你不知道的使用误区
前端·javascript·面试
一枚前端小能手3 小时前
🧭 使用历史记录 API - SPA导航与状态管理的完整指南
前端·javascript
用户47949283569153 小时前
从字符串满天飞到优雅枚举:JavaScript 常量管理的几种姿势
前端·javascript
用户18729422508394 小时前
告别函数的“两面派”人生:深度剖析箭头函数如何一劳永逸地解决 ‘this’ 的二义性
javascript