vue axios 哀求过滤空值

打印 上一主题 下一主题

主题 816|帖子 816|积分 2448

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

一、npm安装 lodash 包

二、request.js 哀求拦截配置

point:
1、哀求拦截器中添加对 params / data 传参的空值判断
2、针对文件上传类的接口,必要屏蔽空值校验,否则会出错。—— 如在文件上传类的接口当中添加 noEmptyCheck 字段,过滤校验。
  1. import axios from 'axios';
  2. import { pickBy } from 'lodash';
  3. import { isEmpty } from '@/utils/utils';
  4. // 创建 axios 实例
  5. const service = axios.create({
  6.   // axios中请求配置有baseURL选项,表示请求URL公共部分
  7.   baseURL,
  8.   // 超时
  9.   timeout: 30000
  10. });
  11. // 添加请求拦截器
  12. service.interceptors.request.use(
  13.   (config) => {
  14.     // 是否需要设置 token,如果请求中自带了Authorization,就不向cookie中取
  15.     const isToken = !!(config.headers || {}).Authorization;
  16.     // 在发送请求之前做些什么 token
  17.     if (getToken() && !isToken) {
  18.       config.headers['Authorization'] = 'Bearer ' + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
  19.     }
  20.     // 传参时如果为空或null,不传该字段
  21.     // 【注】:这里不用lodash的isEmpty,因为空格和数字0无法正确判断
  22.     if(!config.noEmptyCheck) {
  23.         if(config.params) {
  24.           config.params = pickBy(config.params, parameter => !isEmpty(parameter));
  25.         }
  26.         if(config.data) {
  27.           config.data = pickBy(config.data, parameter => !isEmpty(parameter));
  28.         }
  29.     }
  30.     return config;
  31.   },
  32.   (error) => {
  33.     // 对请求错误做些什么
  34.     return Promise.reject(error);
  35.   }
  36. );
  37. // 导出 axios 实例
  38. export default service;
复制代码
  1. /**
  2. * 判断某个值是否是空字符串、空对象、空数组、null、undefined、NaN中的一个,不包含数字0
  3. * @param {*} val
  4. */
  5. export function isEmpty(val) {
  6.   let flag = false;
  7.   const type = Object.prototype.toString.call(val);
  8.   switch (type) {
  9.   // 空字符串
  10.   case '[object String]':
  11.     if(val.trim() === '') {
  12.       flag = true;
  13.     }
  14.     break;
  15.     // null
  16.   case '[object Null]':
  17.     flag = true;
  18.     break;
  19.     // undefined
  20.   case '[object Undefined]':
  21.     flag = true;
  22.     break;
  23.     // NaN
  24.   case '[object Number]':
  25.     if(isNaN(val)) {
  26.       flag = true;
  27.     }
  28.     break;
  29.     // 空数组
  30.   case '[object Array]':
  31.     if(val.length === 0) {
  32.       flag = true;
  33.     }
  34.     break;
  35.     // 空对象
  36.   case '[object Object]':
  37.     if(Object.keys(val).length === 0) {
  38.       flag = true;
  39.     }
  40.     break;
  41.   }
  42.   return flag;
  43. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表