2015-06-22 2 views
4

Я работаю с удобными методами Beego для разбора значений тела запроса и следующее:тела запроса Beego POST всегда пустой

файл маршрутизатор:

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); 
     } 
    }); 

Когда запрос о суперагенте срабатывает, в журналах видно, что путь правильно согласован. Однако c.Ctx.Input.RequestBody всегда пуст.

Я попытался использовать что-то еще, чтобы запустить запрос, такой как почтальон, но безрезультатно. В запросах GET я могу правильно получить параметры запроса.

Любые подсказки или рекомендации по исправлению или отладке этой проблемы?

+1

вы можете сделать захват HTTP, чтобы убедиться, что тело запроса не пусто? –

+0

heyo, как вы предлагаете мне это сделать? В консоли Chrome для разработчиков Chrome я проверил, что тело включает полезную нагрузку, например {"code": "123"}, но при печати всего запроса на Beego он пуст :( – nightscent

+0

, так что вы получили print 'Received []'? –

ответ

9

Вам необходимо настроить «copyrequestbody = true» в файле конфигурации «conf/app.conf».

Значение по умолчанию - false, поэтому содержимое не копируется в c.Ctx.Input.RequestBody.

В примере показан раздел «Извлечение данных из тела запроса» в документе. (http://beego.me/docs/mvc/controller/params.md)

+0

это решение! – lionelmessi

Смежные вопросы