js vue axios post 数组请求参数获取转换, 后端go参数解析(gin框架)全流程示例
创始人
2024-12-28 04:33:07
0次

今天介绍的是前后端分离系统中的请求参数 数组参数的生成,api请求发送,到后端请求参数接收的全过程示例。   

为何会有这个文章:后端同一个API接口同时处理单条或者多条数据,这样就要求我们在前端发送请求参数的时候需要统一将请求参数转换为一个数组(单条数据转换为数组)。 而我们在vue里面如果是这样 const idsStr = row.id || ids.value;  这样的话我们的请求参数就有可能是单条数据或者是一个数组, 而在go语言里面是严格区分数据类型的,同时POST数据发送到后端后都是以流的形式发送的,我们无法多次使用c.ShouldBind来多次绑定请求参数。

js axios网络API数据请求方法定义

这里将请求参数id统一转换为数组,  因为这里的请求参数id, 有可能是一个原始值 , 也有肯能是一个数组。

//url可用性检测 // 这里的参数id有可能是一个数组,也有可能是一个值, // 这里在最终发送的时候都转换为数组来传递 export function checkUrl(id) {   let arr = []; // 创建一个数组   if (id instanceof Array) {     arr = id; // 如果入参是一个数组 Proxy(Array) 则将他赋值给 arr   } else {     arr.push(id); // 将参数id放入到数组中   }   return request({     url: "/video/parser/checkUrl",     method: "POST",     data: {       ids:arr     }   }); }

上面的js示例中我们使用了  instanceof 关键字来判断一个对象是否是数组,js中我们还可以使用原型链 Array.prototype.isPrototypeOf(arr) 来判断 或者使用Array中的isArray方法来判断 Array.isArray(arr)。 还有在axios的网络请求中,请求参数的传递有2种方式即通过 data 或者params来传递请求参数,他们也是有很大区别的,具体如下:

axios data 请求参数传递 

通过data传递请求参数,只能应用于非GET请求方式的情况,GET方式传递请求参数只能通过params的方式 传递请求参数。

注意上面的请求方式为POST,数据时通过data来传递的。 最后生成的请求参数是这样的

vue里面使用selection获取的ids请求参数,他是一个数组。

axios params 请求参数

如果在请求体里面使用了params来传递请求参数, 最后的请求参数都会被生成为url附加到请求url中。,如下:

const ids= row.id||ids.value; 这里的row.id有值,这个时候传递给接口的就是一个原始值非数组,这时axios的网络请求载荷是这样的:

这个时候我们发送的数据的key是  ids  , 而后面的数组的时候发送的key是 ids[]  他们是完全不同的2个key哦

POST请求+params + 数组 通过 axios 发送网络请求【const ids= row.id|| ids.value;这里的row.id没有值,传递的是 ids.value的值】后的 载荷效果图

vue数据绑定和api请求 示例

以下示例展示了vue端,api 数据请求方法,和请求参数获取,批量请求参数,和单个的请求参数获取和发送的示例。 由于js属于弱类型的语言,所以在发送参数的时候是没有强制类型判断的。

   

selection 数据请求复选框 效果

go后端 gin 框架请求参数解析示例

gin框架获取请求传递的参数, 我们只需要定义一个结构体, 然后使用 ShouldBind方法就可很方便的获取前端发送的请求参数。 以下为示例:

// ids请求参数接收结构体 type IdsArrReq struct { 	Ids []int64 `form:"ids"` }  // 请求参数接收方法 示例。。。。 func (a *parserApi) CheckUrl(c *ginx.XContext) { 	var req = &IdsArrReq{} 	// 获取参数 	if err := c.ShouldBind(req); err != nil { 		global.Log.Debug(err.Error()) 	} 	// 这里的 req.Ids 的类型就是 []int64 了     if len(req.Ids) < 1 { 		a.Err(c, "id参数缺失!") 		return 	}     // .......  }

总结:

        我们在统一了请求的请求数据类型后,后端就可以通过一个参数来接收了, 而且在gin框架里面,我们可以非常方便的使用c.ShouldBind来接收请求参数。这里的关键是就在前端发送api请求的时候将请求参数的类型统一转换为数组,这样后端就可以通过定义一个数组来接收了。

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...