Данные не доходят до нужной функции
есть такие uri
router.HandleFunc("/hello_page/", api.Hello_page).Methods(http.MethodPost)
router.HandleFunc("/check_user/", api.Check_user).Methods(http.MethodPost)
Для них есть api
func Hello_page(w http.ResponseWriter, r *http.Request) {
_, encode_data := Decode_URL_query(w, r)
token_for_compare := Requester("http://192.168.1.109:8282/check_user/", w, r, encode_data)
w.Write(token_for_compare)
}
func Check_user(w http.ResponseWriter, r *http.Request) {
encode_data := Get_URL_query_and_encode_it(w, r)
//здесь все поля json почему-то пустые. Хотя должны быть заполнены.
exist_user, token_from_db, err := database.Check_pair_username_and_password(encode_data)
var answer Answer
if err == bcrypt.ErrMismatchedHashAndPassword {
w.WriteHeader(http.StatusForbidden)
answer.Answr = "Require"
}
if err == bcrypt.ErrHashTooShort {
w.WriteHeader(http.StatusNotFound)
answer.Answr = "NotFound"
}
if exist_user {
w.WriteHeader(http.StatusOK)
answer.Answr = token_from_db
}
w.Write(tmplsrv.Encoding(answer))
}
Функции которые получают параметры из запроса
func Get_URL_query_and_encode_it(w http.ResponseWriter, r *http.Request) []byte {
user_data := JSON_struct{
Email: r.URL.Query().Get("email"),
Password: r.URL.Query().Get("password"),
}
encode_data := tmplsrv.Encoding(user_data)
return encode_data
}
func Decode_URL_query(w http.ResponseWriter, r *http.Request) (JSON_struct, []byte) {
encode_data := Get_URL_query_and_encode_it(w, r)
decode_data := JSON_struct{}
tmplsrv.Decoding(encode_data, &decode_data)
return decode_data, encode_data
}
И вспомогательная функция которая делает запросы к api
func Requester(address_uri string, w http.ResponseWriter, r *http.Request, encode_data []byte) []byte {
//хотя здесь json заполнен.
address_uri = strings.TrimSpace(fmt.Sprintf("\n%s\n", address_uri))
resp, err := http.Post(address_uri, "application/json", bytes.NewBuffer(encode_data))
errors(err)
body, err := ioutil.ReadAll(resp.Body)
errors(err)
resp.Body.Close()
return body
}
Вопрос. Если json заполнен параметрами запроса в функции Requester, заполенен в функции Hello_page то куда теряются параметры из json-а в функции Check_user? хотя если обратиться к uri
router.HandleFunc("/check_user/", api.Check_user).Methods(http.MethodPost)
То возвращается корректный ответ. В чем трабл? как лечить? Спасибо за внимание.
UPD: работает только если в url-е явно задать параметры
Requester(fmt.Sprintf("http://192.168.1.109:8282/check_user/?email=%s&password=%s", decode_data.Email, decode_data.Password), w, r, nil)
Ответы (1 шт):
Автор решения: Quester
→ Ссылка
заработало только с postform. Переписал Requester
func Requester(address_uri string, w http.ResponseWriter, r *http.Request, encode_data []byte) []byte {
address_uri = strings.TrimSpace(fmt.Sprintf("\n%s\n", address_uri))
decode_data := JSON_struct{}
tmplsrv.Decoding(encode_data, &decode_data)
params := url.Values{
"email": {decode_data.Email},
"password": {decode_data.Password},
}
resp, err := http.PostForm(address_uri, params)
errors(err)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
errors(err)
return body
}
И получение данных от пользователя
func Get_URL_query_and_encode_it(w http.ResponseWriter, r *http.Request) []byte {
r.ParseForm()
user_data := JSON_struct{
Email: r.FormValue("email"),
Password: r.FormValue("password"),
}
encode_data := tmplsrv.Encoding(user_data)
return encode_data
}