前端传参如果参数过多你还会拼接在URL上嘛?

大厂技术  高级前端  Node进阶
点击上方 程序员成长指北,关注公众号
回复1,加入高级Node交流群

作者:很晚很晚了

https://juejin.cn/post/7291468863395954749

前言

qs是npm仓库所管理的包,可以通过npm install qs安装,因此我们可以直接通过require('qs')引用得到,qs.stringify()作用是将对象或者数组序列化成URL的格式。那么这句话是什么意思呢?

15fe3f5afec10df576ac1f84bfb42ea3.png

我们先来看一下官方的用法

Usage

var qs = require('qs');
var assert = require('assert');

var obj = qs.parse('a=c');
assert.deepEqual(obj, { a: 'c' });

var str = qs.stringify(obj);
assert.equal(str, 'a=c');

非常简单,直接引入然后通过qs.stringify() ,qs.parse() 就可以了。

下面我们举两个例子:

  • 对象序列化

let obj = {
methods: 'query_num'
id: 1,
name: 'Lisa'
}
qs.stringify(obj)
//   methods=query_stu&id=1&name=chenchen    这就是我们的传到服务器的url
  • 数组序列化

let arr = [1,3]
qs.stringify({a:arr})
// 'arr[0]=1&arr[1]=3'

这种格式可以进行转为序列化,但是url中会带有数组的下标a[0]、a[1],这并不是我们一般的处理办法。常用方法如下:

// 常用并推荐使用
let arr = [1,3]
qs.stringify({a:arr},{indices:false});
// 'arr=1&arr=3' 这个格式,是比较常用的格式

其中:indices:false,去除默认处理的方式。如果不写这个的话,则默认是第一种处理的方式(带下标)。

qs.parse()则就是反过来的,将我们通过qs.stringify()序列化的对象或者数组转回去。

let url = 'id=1&name=chenchen'
qs.parse(url)
// {id:1,name:chenchen}

接下来看一个实例:

// 根据业务id查询业务费用列表
export function commonBuzCostPage(params) {
  return request({
    url: `/departmentCost/commonBuzCostPage`,
    method: 'get',
    params,
    paramsSerializer: params => {
      return qs.stringify(params, {
        indices: false
      })
    }
  })
}
fetch(`${apiurl}/projiects?${qs.stringify(param)}`) 
.then(async response =>{
    if (response.ok){
        setList(await response.json())
        }
    })

Node 社群

 
 

我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

260a242fc61a2c2cf2ef6789ba0c1f1d.png

“分享、点赞、在看” 支持一下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值