如何在go lang中将数据从控制器传递到表单?

时间:2015-11-14 00:05:30

标签: api go

我有一个接收http请求的处理程序/控制器。

func UpdateHandler(request *http.Request) {
    ID := mux.Vars(request)["ID"]
    UpdateForm.Save(ID,db)
}

然后我有一个表单,我想处理数据并最终更新它。

type UpdateForm struct {
    ID              string            `json:"type"`
}

func (UpdateForm) Save(db mongo.Database) {
    id := ID
    repository.Update(Id)
}

Go将打印出undefined ID

如何确保表单从控制器获取值?

2 个答案:

答案 0 :(得分:2)

您可以使用请求中的数据填充表单。如果您的请求包含JSON编码的主体,那么您可以将其解码为表单对象,如下所示:

package main

import (
    "encoding/json"
    "net/http"
    "strings"
    "fmt"
)

type UpdateForm struct {
    ID string `json:"type"`
}

func main() {
    req, _ := http.NewRequest(
        "POST",
        "http://example.com",
        strings.NewReader(`{"type": "foo"}`),
    )

    var form *UpdateForm
    json.NewDecoder(req.Body).Decode(&form)
    fmt.Println(form.ID) // Output: foo
}

或者你可以像这样直接实例化它:

func UpdateHandler(request *http.Request) {
    ID := mux.Vars(request)["ID"]
    form := &UpdateForm{ID: ID}
    form.Save()
}

答案 1 :(得分:1)

我认为它与处理程序无关,但您的代码不一致。这一行

UpdateForm.Save(ID,db)

方法Save()有两个参数,而原始方法签名只有一个mongo.Database类型参数。

以下是我的假设:

type UpdateForm struct {
    ID     string   `json:"type"`
}

func (u UpdateForm) Save(db mongo.Database) {
    id := u.ID
    repository.Update(id)
}

// UpdateForm instance somewhere
var u = UpdateForm{}

func UpdateHandler(request *http.Request) {
    u.ID := mux.Vars(request)["ID"]
    u.Save(db)
}