将 Angular 表单提交到 Go API 不断发布 Nil

我正在尝试从我的 Angular 前端发布到我的 Go API,无论我做什么,它都会将 nil 发布到 Go API。当我测试变量是否发送到 Angular 订阅者时,它显示它们是,但由于某种原因它不会发布到这个简单的 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))


}

这是我在 Go 中的输出

map[User-Agent:[Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Mobile Safari/537.36] Access-Control-Request-Headers:[ access-control-allow-headers,access-control-allow-origin,content-type] Referer:[ http://localhost:4200/login?returnUrl=%2Fdashboard]接受语言:[en-US,en;q =0.9] 连接:[keep-alive] 接受:[ / ] 接受编码:[gzip, deflate, br] 访问控制请求方法:[POST] 来源:[ http://localhost:4200]] & {{} [] {[] 0 { false [] false 0 0} { false [] false 0 0} { } false false} 0 0 { false [] false 0 0} 0 []}

然后我在 Angular 中收到一个 CORS 错误,它是:

从来源“ http://localhost: 4200 ”访问位于“ http://localhost: 8001/signin ”的 XMLHttpRequest 已被 CORS 策略阻止:Access-Control 不允许请求标头字段 access-control-allow-origin -在飞行前响应中允许标头。

如果有人能帮助我,我将不胜感激。我是 Go 和 Angular 的新手,并且仍在学习如何让它们相互交互。


梵蒂冈之花
浏览 115回答 1
1回答

BIG阳

像这样进行更改: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;      }));  }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go