Загрузка данных из шаблона golang
Всем привет. Есть html файл login.html
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
</head>
<body>
<form method="POST">
<label>Name</label>
<input type="text" name="name">
<input type="submit" value="Send" />
</form>
</body>
</html>
Так же есть фрагмент кода golang
//Выводится форма в которую вводится текст и этот текст возвращается в вызывающую функцию
func GetFormText(w http.ResponseWriter, r *http.Request) string {
http.ServeFile(w, r, "./login.html")
details := DataFromHTML{
Name1: r.FormValue("name"),
}
return details.Name1
}
//проверка что введено в поле(что вернул GetFormText)
func CheckName(w http.ResponseWriter, r *http.Request) bool {
if GetFormText(w, r) == "text" {
return true
} else {
return false
}
}
//если CheckName вернул true то нужно установить куку
func Condition(w http.ResponseWriter, r *http.Request) {
if CheckName(w, r) {//с этим условием кука не ставится
cookie := http.Cookie{Name: "Name", Value: "Some"}
http.SetCookie(w, &cookie)
}
}
func main() {
http.HandleFunc("/data", Condition)
http.ListenAndServe(":8181", nil)
}
Как и указано в комментарии кука не ставится при проверке CheckName, хотя если вместо установки куки будет другой код то он выполняется без проблем и если убрать условие то кука ставится без проблем. Никак не могу догнать, почему не выходит поставить куку.
Ответы (1 шт):
перед тем, как доставать данные из формы(r.FormValue("name")) надо ее распарсить
if err := r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return ""
}
но возникает другая проблема. когда страницу загружаем в первый раз, то мы делаем GET запрос, а когда заполнили форму, нам надо делать POST запрос. проблема в том, что это один и тот же хэндлер обрабатывает.
можно отследать какого типа запрос, чтобы определить поведение. например, так
func GetFormText(w http.ResponseWriter, r *http.Request) string {
switch r.Method {
case "GET":
http.ServeFile(w, r, "./login.html")
case "POST":
if err := r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return ""
}
fmt.Fprintf(w, "Post from website! r.PostFrom = %v\n", r.PostForm)
name := r.FormValue("name")
fmt.Fprintf(w, "Name = %s\n", name)
return name
default:
fmt.Fprintf(w, "Sorry, only GET and POST methods are supported.")
}
return ""
}