我有一个接收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
如何确保表单从控制器获取值?
答案 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)
}