前端接口多参数请求时如何优雅封装

接口多参数优雅封装

开发中经常会遇到有一个接口需要的query参数比较多, 参数的数据类型也不全是 string | number ,还存在数组或者其他类型的情况。

我以前的做法

因为是query参数,我以前的写法就是在接口地址上面进行字符串拼接。

ts 复制代码
 async function getJobList(
    clusterId: string,
    page: number,
    pageSize: number,
    JobName : string,
    JobStatus : string,
    Username : string,
    Queue : string,
    StartTime: string,
    EndTime: string
  ) {
    if (JobStatus == undefined) JobStatus = '';
    const res = await apiRequest.get(
      `/api/Cluster/${clusterId}/Job?page=${page}&pageSize=${pageSize}&JobName=${JobName}&JobStatus=${jobStatus}&Username=${Username}&Queue=${Queue}&StartTime=${
        StartTime ? StartTime : ''}&EndTime=${EndTime ? EndTime : ''}`
    );
    return res;
  }

以前觉得这样做没什么问题,就是写起来很不优雅,代码的可读性也特别差。

那能不能不安代码的格式化自己整理一下表呢?为方阅读这样去写

ts 复制代码
 const res = await apiRequest.get(
      `/api/Cluster/${clusterId}/Job?${page ? 'page=' + page : ''}
      ${pageSize ? '&pageSize=' + pageSize : ''}
      ${JobName ? '&JobName=' + JobName : ''}
      ${JobStatus ? JobStatus?.map((x) => '&JobStatus=' + x).join('') : ''}
      ${Username ? '&Username=' + Username : ''}
      ${Queue ? '&Queue=' + Queue : ''}
      ${StartTime ? '&StartTime=' + StartTime : '' }
      ${EndTime ? '&EndTime=' + EndTime : '' }`
    );

这种写法看起来更易读了,但是 ` 中的换行和空格会保留在里面,参数就会莫名的加上几个空格,查询参数就不对了(好心干坏事了)。

再说,如果参数更多呢,那岂不是要再去一个一个拼接,时间成本也太高了,有没有更优雅的写法呢?

解决办法

在MDN上看到了这个URLSearchParams接口

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

通过URLSearchParams.append(name, value)方法可以不断往里面添加参数

下面是更改后的代码

ts 复制代码
 async function getJobList(
    clusterId: string,
    page: number,
    pageSize: number,
    JobName?: string,
    JobStatus?: Array<string>,
    Username?: string,
    Queue?: string,
    StartTime?: string,
    EndTime?: string
  ) {
    if (JobStatus?.length == 0) JobStatus = null;
    const add_params = {
      page: page,
      pageSize: pageSize,
      JobName: JobName,
      JobStatus: JobStatus,
      Username: Username,
      Queue: Queue,
      StartTime: StartTime,
      EndTime: EndTime,
    };
    const searchParams = new URLSearchParams();
    Object.keys(add_params).forEach((key) => {
      if ( add_params[key] !== undefined && add_params[key] !== null ) {
        const value = add_params[key];
        if (Array.isArray(value)) {
          value.forEach((item) => searchParams.append(key, item));
        } else {
          searchParams.append(key, value);
        }
      }
    });
    const res = await apiRequest.get(
      `/api/Cluster/${clusterId}/Job?${searchParams.toString()}`
    );
    return res;
  }

这样去写代码就整洁优雅了太多了

相关推荐
镜宇秋霖丶5 小时前
2026.5.6@霖宇博客制作中遇见的问题
前端·javascript·vue.js
吴声子夜歌5 小时前
Vue3——TypeScript基础
javascript·typescript
小李子呢02116 小时前
前端八股Vue---Vue-router路由管理器
前端·javascript·vue.js
百锦再7 小时前
Auto.js变成基础知识学习
开发语言·javascript·学习·sqlite·kotlin·android studio·数据库开发
洛_尘8 小时前
Python 5:使用库
java·前端·python
Bigger8 小时前
Bun 能上生产吗?我的实战结论
前端·node.js·bun
kyriewen9 小时前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
前端·rust·webassembly
kyriewen119 小时前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
开发语言·前端·javascript·后端·性能优化·rust·前端框架
IT_陈寒9 小时前
SpringBoot自动配置坑了我,原来要这样绕过去
前端·人工智能·后端
东方小月10 小时前
Claude Code 完整上手指南:MCP、Skills、第三方模型配置一次搞定
前端·人工智能·后端