0
点赞
收藏
分享

微信扫一扫

Vue3 axios 和 Gin 前后端交互

c一段旅程c 2022-01-26 阅读 67

前端请求

异步请求

前端可以使用try+await代替promise+then,实现串流编码的异步处理。

Axios 和 Ajax

axios和ajax的区别: axios是通过Promise实现对ajax技术的一种封装,就像jquery对ajax的封装一样,简单来说就是ajax技术实现了局部数据的刷新,axios实现了对ajax的封装,axios有的ajax都有,ajax有的axios不一定有,总结一句话就是axios是ajax,ajax不止axios。

Axois 发送 POST 请求前会发送 OPTIONS 请求进行预检。

  • form-data、x-www-form-urlencoded:不可以用@RequestBody;可以用@RequestParam。
  • application/json:json字符串部分可以用@RequestBody;url中的?后面参数可以用@RequestParam。

跨域

// 跨域中间件
func CorsMiddleware() gin.HandlerFunc {
	return func(gctx *gin.Context) {
		method := gctx.Request.Method
		origin := gctx.Request.Header.Get("Origin") //请求头部
		if origin != "" {
			// 接收客户端发送的origin
			gctx.Writer.Header().Set("Access-Control-Allow-Origin", origin)
			// 服务器支持的所有跨域请求的方法
			gctx.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
			// 允许跨域设置可以返回其他子段,可以自定义字段
			gctx.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, Content-Type, X-CSRF-Token, Token, session")
			// 允许浏览器(客户端)可以解析的头部
			gctx.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers")
			// 设置缓存时间
			gctx.Header("Access-Control-Max-Age", "172800")
			// 允许客户端传递校验信息比如 cookie
			gctx.Header("Access-Control-Allow-Credentials", "true")
		}

		// 允许类型校验,不经过网关,放行所有 OPTIONS 请求
		if method == "OPTIONS" {
			gctx.JSON(http.StatusOK, "ok!")
			gctx.Abort()
			return
		}

		gctx.Next()
	}
}

后端处理

axios 请求为 RequestBody, ajax 请求为 PostForm。

		var err error
		var reqDataJsonMap map[string]string
		var reqDataJsonString string
		err = gctx.BindJSON(&reqDataJsonMap) // 解析 axios json: data, _ := ioutil.ReadAll(gctx.Request.Body)
		if err != nil || util.IsNil(reqDataJsonMap["data"]) {
			reqDataJsonString = gctx.PostForm("data") // 解析 ajax x-www-form-urlencoded
		} else {
			reqDataJsonString = reqDataJsonMap["data"]
		}
举报

相关推荐

0 条评论