前端将数据发送到web端数据接收方式
这里是在第三方包下获取的方式github.com/julienschmidt/httprouter
通过url请求解析数据
例如url请求为/api/v1.0/smscode/18311111111
添加路由
rou.GET("/api/v1.0/smscode/:mobile", handler.GetSmscd)
路由实现
func GetSmscd(w http.ResponseWriter, r *http.Request,ps httprouter.Params) {
//获取手机号 byname
mobile := ps.ByName("mobile")
...
}
url请求携带参数
例如url请求为/api/v1.0/smscode/111?text=abc
?后面的参数通过 & 作为分隔,每个键值对 以 = 进行划分,用来传递不太重要的数据
路由实现
//获取get请求的参数,类型是map[string][]string
value := r.URL.Query()["text"][0]
post 密文传输
通过json传输,通过json解析到 map当中获取数据
func PostLogin(w http.ResponseWriter, r *http.Request,ps httprouter.Params) {
// decode the incoming request as json
//接受 前端发送过来数据的
var request map[string]interface{}
// 将前端 json 数据解析到 map当中
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
http.Error(w, err.Error(), 500)
return
}
//校验数据
if request["mobile"].(string) == "" ||request["password"].(string) == ""{
//准备返回给前端的map
response := map[string]interface{}{
"errno": utils.RECODE_DATAERR,
"errmsg": utils.RecodeText(utils.RECODE_DATAERR),
}
// encode and write the response as json
//设置返回数据的格式
w.Header().Set("Content-Type","application/json")
//将map转化为json 返回给前端
if err := json.NewEncoder(w).Encode(response); err != nil {
http.Error(w, err.Error(), 500)
return
}
return
}
...
}
cookie默认携带在请求中
func DeleteSession(w http.ResponseWriter, r *http.Request,ps httprouter.Params) {
fmt.Println("退出登陆 DeleteSession /api/v1.0/session")
//从cookie当中获取sessionid
cookie ,err :=r.Cookie("ihomelogin")
if err!=nil || cookie.Value ==""{
response := map[string]interface{}{
"errno": utils.RECODE_SESSIONERR,
"errmsg": utils.RecodeText(utils.RECODE_SESSIONERR),
}
// encode and write the response as json
//设置返回数据的格式
w.Header().Set("Content-Type","application/json")
//将map转化为json 返回给前端
if err := json.NewEncoder(w).Encode(response); err != nil {
http.Error(w, err.Error(), 500)
return
}
return
}
...
}
通过form表单进行传输
服务端接收数据
func (r *Request) FormValue(key string) string
接收文件
func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error)
func PostAvatar(w http.ResponseWriter, r *http.Request,ps httprouter.Params) {
fmt.Println(" 上传头像 PostAvatar /api/v1.0/user/avatar ")
//接受前端发送过来的二进制 图片数据
File, FileHeader, err := r.FormFile("avatar")
if err !=nil{
response := map[string]interface{}{
"errno": utils.RECODE_IOERR,
"errmsg": utils.RecodeText(utils.RECODE_IOERR),
}
// encode and write the response as json
//设置返回数据的格式
w.Header().Set("Content-Type","application/json")
//将map转化为json 返回给前端
if err := json.NewEncoder(w).Encode(response); err != nil {
http.Error(w, err.Error(), 500)
return
}
return
}
/*TODO 可以进行 文件类型判断 */
//获取 文件的基本信息
fmt.Println("文件名",FileHeader.Filename)
fmt.Println("文件大小",FileHeader.Size)
//创建1个二进制的空间
filebuffer :=make([]byte,FileHeader.Size)
//把接受或来的文件 读如二进制空间
_ ,err = File.Read(filebuffer)
if err!=nil{
response := map[string]interface{}{
"errno": utils.RECODE_IOERR,
"errmsg": utils.RecodeText(utils.RECODE_IOERR),
}
// encode and write the response as json
//设置返回数据的格式
w.Header().Set("Content-Type","application/json")
//将map转化为json 返回给前端
if err := json.NewEncoder(w).Encode(response); err != nil {
http.Error(w, err.Error(), 500)
return
}
return
}
...
}