(共556篇)
全部分类

接口数据中的布尔值处理案例
[ Case ] 

目前在很多项目中, 对于标识符一类的字段, 在mysql中都以 String Y和 N来存储, 而对于前端来说, 这种字段使用true或者false更方便, 以往封装好的http类中, 会在接收数据时, 对所有的String Y 和 N转换成true与false, 发送数据时, 再把 true/false转为字符串.

虽然目前没有大的问题, 但对于富文本功能来说, 如果富文本中出现了Y与N字符, 保存的时候也会被转成字面量true与fasle, 依然有较大的隐患

因此, 基于降低功能耦合度的考虑, 把Request与Response中是否转换String Y与N的问题, 进行单独封装, 保存在/utils/index.js中, 需要的时候自行调用即可

解析 Response 中的的数据:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
export function mapRes(data, isArrayYItem = false) {
  // 格式化接收到的数据, 主要是把'Y'改成true, 'N'改成false

  // 处理布尔值
  if (!isArrayYItem && data === 'Y') {
    return true;
  }
  if (!isArrayYItem && data === 'N') {
    return false;
  }
  if (typeof data !== 'object') {
    return data;
  }

  // 处理数组
  if (Array.isArray(data)) {
    return data.map((item) => mapRes(item, true));
  }

  // 处理map对象
  if (
    Object.prototype.toString.call(data).slice(-7, -1).toLowerCase() ===
    'object'
  ) {
    const obj = {};
    for (const k in data) {
      obj[k] = mapRes(data[k]);
    }
    return obj;
  }

  return data;
}

Request发送之前处理data数据:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
export function mapReq(data, isArrayYItem) {
  // 格式化即将发送的数据, 主要是把true改成'Y', false改成'N'

  // 处理布尔值
  if (!isArrayYItem && data === true) {
    return 'Y';
  }
  if (!isArrayYItem && data === false) {
    return 'N';
  }

  // 处理数组
  if (Array.isArray(data)) {
    return data.map((item) => mapReq(item, true));
  }

  // 处理map对象
  if (
    Object.prototype.toString.call(data).slice(-7, -1).toLowerCase() ===
    'object'
  ) {
    const obj = {};
    for (const k in data) {
      obj[k] = mapReq(data[k]);
    }
    return obj;
  }

  // 处理其他类型
  return data;
}