我正在使用Beego的便捷方法来解析请求正文值并具有以下内容:
路由器文件:
apiNamespace := beego.NewNamespace("/api")
apiNamespace.Router("/sessions/google/new", &controllers.SessionsController{}, "get:GoogleNewSession")
beego.AddNamespace(apiNamespace)
控制器代码:
func (c *SessionsController) URLMapping() {
c.Mapping("GoogleNewSession", c.GoogleNewSession)
}
func (c *SessionsController) GoogleNewSession() {
// Always serve JSON
defer func() {
c.ServeJson()
}()
// This is always blank
log.Printf("'Received %+v'", c.Ctx.Input.RequestBody)
c.Ctx.ResponseWriter.WriteHeader(200)
return
// truncated
}
前端JS(超级代理):
request
.post('/sessions/google/new')
.use(prefix)
.send({ code: authCode })
.set('Accept', 'application/json')
.end(function(err, res){
console.log("******* request", res.request)
if (res.ok) {
var body = res.body;
console.log('yay got ' + JSON.stringify(res.body));
} else {
console.log("***** err", err);
console.log("***** not ok", res.text);
}
});
当superagent请求触发时,我可以在日志中看到路径正确匹配。但是,c.Ctx.Input.RequestBody
始终为空。
我曾尝试使用别的东西来解雇Postman这样的请求,但无济于事。在GET请求中,我能够正确检索查询参数。
有助于修复或调试此问题的任何线索或建议吗?
答案 0 :(得分:11)
您需要配置" copyrequestbody = true"在配置文件" conf / app.conf"。
默认值为false,因此内容不会复制到c.Ctx.Input.RequestBody。
示例显示了部分"从请求正文中检索数据"在文件中。 (http://beego.me/docs/mvc/controller/params.md)