I use angular to get information register html and I post to path api it work but print word "work" and I cant not get value In body and I test path post use postman it show firstname.......................................................................................................................................
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
})
}
}
}
</div>
I think it could be that your go server is expecting a content-type: application/x-www-form-urlencoded
https://golang.org/pkg/net/http/#Request.ParseForm
But angular is submitting the form as a json object.
To debug what is happening check the outgoing response from chrome to your backend Do this by enabling "Log XmlHttpRequest from the settings menu in chrome devtools.
You should then be able to se that the body is JSON.
Try using this to parse the body instead
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)
}