6

リクエストボディの値を解析するための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);
         }
     });

スーパーエージェントのリクエストが発生すると、パスが正しく一致していることをログで確認できます。ただし、c.Ctx.Input.RequestBodyは常に空です。

Postman などのリクエストを発行するために他のものを使用しようとしましたが、役に立ちませんでした。GET リクエストでは、クエリ パラメータを正しく取得できます。

この問題の修正またはデバッグに役立つ手がかりや提案はありますか?

4

1 に答える 1

15

構成ファイル「conf/app.conf」で「copyrequestbody = true」を構成する必要があります。

デフォルトは false であるため、コンテンツは c.Ctx.Input.RequestBody にコピーされません。

この例は、ドキュメントの「リクエストボディからのデータの取得」セクションに示されています。( http://beego.me/docs/mvc/controller/params.md )

于 2015-08-06T00:32:08.023 に答える