Почему я не могу получить форму тела Angular - PullRequest
0 голосов
/ 17 декабря 2018

Я использую angular для получения информации о регистре html и отправляю по пути api он работает, но печатаю слово "работа", и я не могу получить значение В теле, и я тестирую путь после использования почтальона, он показывает имя .......................................................................................................................................

server.go

package main

import (
	"github.com/gorilla/handlers"
	"github.com/gorilla/mux"
	"net/http"
)

func main() {

	router := mux.NewRouter()
	router.HandleFunc("/register", Createuser).Methods("POST")
	headers := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"})
	methods := handlers.AllowedMethods([]string{"GET", "POST", "PUT", "DELETE"})
	origins := handlers.AllowedOrigins([]string{"*"})
	http.ListenAndServe(":12345", handlers.CORS(headers, methods, origins)(router))

}


func Createuser(writer http.ResponseWriter, request *http.Request) {
	request.ParseForm()
    print(request.FormValue("firstName"))
	print("work")
}

register.component.ts

import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { first } from 'rxjs/operators';

import { AlertService, UserService } from '../_services';

@Component({templateUrl: 'register.component.html'})
export class RegisterComponent implements OnInit {
    registerForm: FormGroup;
    loading = false;
    submitted = false;

    constructor(
        private formBuilder: FormBuilder,
        private router: Router,
        private userService: UserService,
        private alertService: AlertService) { }

    ngOnInit() {
        this.registerForm = this.formBuilder.group({
            firstName: ['', Validators.required],
            lastName: ['', Validators.required],
            username: ['', Validators.required],
            password: ['', [Validators.required, Validators.minLength(6)]]
        });
    }

    // convenience getter for easy access to form fields
    get f() { return this.registerForm.controls; }

    onSubmit() {
        this.submitted = true;

        // stop here if form is invalid
        if (this.registerForm.invalid) {
            return;
        }

        this.loading = true;
        this.userService.register(this.registerForm.value)
 
    }
}
user.service.ts

import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';

import {environment} from '../../environments/environment';
import {User} from '../_models';

@Injectable()
export class UserService {
  constructor(private http: HttpClient) {
  }


  register(user: User) {
     return this.http.post(`${environment.apiUrl}/register`, {
      firstName: user.firstName,
      lastName : user.lastName,
      username : user.username,
      password : user.password
    })
  }

  }
}

1 Ответ

0 голосов
/ 17 декабря 2018

Я думаю, возможно, ваш сервер go ожидает content-type: application/x-www-form-urlencoded

https://golang.org/pkg/net/http/#Request.ParseForm

Но angular отправляет форму в виде объекта json.

Для отладки происходящего проверьте исходящий ответ chrome на ваш бэкэнд. Для этого включите «Log XmlHttpRequest из меню настроек в chrome devtools.

После этого вы сможете определить, что тело является JSON.

Попробуйте использовать это для анализа тела вместо

func test(rw http.ResponseWriter, req *http.Request) {
    decoder := json.NewDecoder(req.Body)
    var t test_struct
    err := decoder.Decode(&t)
    if err != nil {
        panic(err)
    }
    log.Println(t.Test)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...