Отправить угловую форму в Go API продолжает публиковать ноль - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь публиковать сообщения из моего углового интерфейса в мой API Go, и независимо от того, что я делаю, он постоянно публикует ноль в Go API.Когда я проверяю, попадают ли переменные в подписчик Angular, он показывает, что они есть, но по какой-то причине он не будет публиковать в этой простой конечной точке Go

Вот мой код, любая помощь будет очень признательна:

GO API

package main

import (
    "encoding/json"
    "fmt"
    "github.com/dgrijalva/jwt-go"
    "log"
    "net/http"
    "time"
)

func main() {

    http.HandleFunc("/signin", indexHandler)
    http.HandleFunc("/welcome", Welcome)
    http.HandleFunc("/refresh", Refresh)

    // start the server on port 8000
    log.Fatal(http.ListenAndServe(":8001", nil))
}

func setupResponse(w *http.ResponseWriter, req *http.Request) {
    (*w).Header().Set("Access-Control-Allow-Origin", "*")
    (*w).Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
    (*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}

func indexHandler(w http.ResponseWriter, req *http.Request) {
    setupResponse(&w, req)
    if (*req).Method == "POST" {
        return
    }
    fmt.Println(req.Header)

    fmt.Println(req.ParseForm())
    fmt.Println(json.NewDecoder(req.Body))

}

Angular Subscriber

 login(username: string, password: string) {

    const httpOptions = {
      headers: new HttpHeaders({ 'Content-Type': 'application/json charset=utf-8'
        , 'Access-Control-Allow-Origin': '*'
        , 'Access-Control-Allow-Headers': 'access-control-allow-origin, access-control-allow-headers'})
    };
   return this.http.post(`${environment.APIEndpoint}/signin`, {username, password}, httpOptions).pipe(map(user => {
        // login successful if there's a jwt token in the response
        if (user && user) {
          // store user details and jwt token in local storage to keep user logged in between page refreshes
          localStorage.setItem('currentUser', JSON.stringify(user));
        }

        return user;
      }));
  }

Это мой вывод на карте Go

[User-Agent: [Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build / MRA58N) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 71.0.3578.98 Mobile Safari / 537.36] Access-Control-Request-Headers: [access-control-allow-headers,access-control-allow-origin, content-type] Реферер: [http://localhost:4200/login?returnUrl=%2Fdashboard] Accept-Language: [en-US, en; q = 0.9] Соединение: [keep-alive] Accept: [ /] Accept-Encoding: [gzip, deflate, br] Метод запроса-контроля доступа: [POST] Источник: [http://localhost:4200]] & {{} [] {[] 0 {false [] false0 0} {false [] false 0 0} {} false false} 0 0 {false [] false 0 0} 0 []}

И тогда я получаю ошибку CORS в Angular, котораяэто:

Access to XMLHttpRequest в 'http://localhost:8001/signin' from origin' http://localhost:4200' заблокирован политикой CORS: поле заголовка запроса access-control-allow-origin не разрешено Access-Control-Allow-Headers в предварительной проверкеответ.

Буду очень признателен, если кто-нибудь сможет мне помочь.Я новичок в Go и Angular и все еще учусь, как заставить их взаимодействовать друг с другом.

1 Ответ

0 голосов
/ 13 марта 2019

внести изменения следующим образом:

func indexHandler(w http.ResponseWriter, req *http.Request) {
    setupResponse(&w, req)
    if (*req).Method == "POST" {
          fmt.Println(req.Header)

          fmt.Println(req.ParseForm())
          fmt.Println(json.NewDecoder(req.Body))
    }
}

Угловая сторона клиента

login(username: string, password: string) {

    const httpOptions = {
      headers: new HttpHeaders({ 'Content-Type': 'application/json charset=utf-8'})
    };
   return this.http.post(`${environment.APIEndpoint}/signin`, `{"username":username, "password":password}`, httpOptions).pipe(map(user => {
        // login successful if there's a jwt token in the response
        if (user && user) {
          // store user details and jwt token in local storage to keep user logged in between page refreshes
          localStorage.setItem('currentUser', JSON.stringify(user));
        }

        return user;
      }));
  }
...