我通过axios发送一个请求作为post,因为我需要发送一个body和params。然而,当它到达我的后端的参数不存在!
async getAll(page: number, pageSize: number, filter: IFilter): Promise<Course[]> {
const res = await request.post<{ data: Course[]; metadata: 'none' }>("/v1/courses", {
params: {
page: page,
pageSize: pageSize,
},
data: filter,
});
return res.data.data;
}
字符串
浏览器控制台中的网络选项卡
{params: {page: 1, pageSize: 6},…}
data:
{all: true, beginner: false, intermediate: false, advanced: false, amqp: false, databases: false,…}
params:
{page: 1, pageSize: 6}
型
片段
func (app *Courses) CoursesAllHandler(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
clog := log.GetLoggerFromContext(ctx)
p := r.URL.Query().Get("page")
ps := r.URL.Query().Get("pageSize")
var filter Filter
err := json.NewDecoder(r.Body).Decode(&filter)
if err != nil {
http.Error(w, "Failed to parse request body", http.StatusBadRequest)
return
}
型
对我来说,axios调用看起来是正确的,params方法也可以在后端获取它们。然而,当我查看网络选项卡并看到data:
和params
时,我想知道是否需要更深入。所以我试着:
p := r.URL.Query().Get("data") <--- empty
type Filter struct {
All bool `json:"all"`
Beginner bool `json:"beginner"`
Advanced bool `json:"advanced"`
Intermediate bool `json:"intermediate"`
Go bool `json:"go"`
}
型
任何建议将不胜感激。
- 更新-
请求转储
request, err := httputil.DumpRequest(r, true)
if err != nil {
return
}
clog.Info(string(request))
(KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\r\n\r\n{\"params\":{\"page\":1,\"pageSize\":6},\"data\":{\"all\":true,\"beginner\":false,\"intermediate\":false,\"advanced\":false,\"amqp\":false,\"databases\":false,\"docker\":false,\"gcp\":false,\"go\":false,\"grpc\":false,\"java\":false,\"mux\":false,\"serverless\":false,\"vue\":false,\"spring\":false}}"}
1条答案
按热度按时间kq4fsx7k1#
您为什么要查看
r.URL.Query()
来获取POST参数?您需要执行以下操作:字符串