angular - 向 Go API 提交 Angular 表单不断发布 Nil
问题描述
我正在尝试从我的角度前端发布到我的 Go API,无论我做什么,它都会向 Go API 发布 nil。当我测试变量是否正在发送给 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))
}
角订阅者
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 中的输出
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] 引用者:[ http://localhost:4200/login?returnUrl=%2Fdashboard] Accept-Language:[en-US,en;q =0.9]连接:[keep-alive]接受:[ / ]接受编码:[gzip,deflate,br]访问控制请求方法:[POST]来源:[ http://localhost:4200]] & {{} [] {[] 0 { 假 [] 假 0 0} { 假 [] 假 0 0} { } 假假} 0 0 { 假 [] 假 0 0} 0 []}
然后我在 Angular 中收到一个 CORS 错误,即:
从源“ http://localhost:4200 ”访问“ http://localhost:8001/signin ”处的 XMLHttpRequest已被 CORS 策略阻止:Access-Control 不允许请求标头字段 access-control-allow-origin - 预检响应中的允许标头。
如果有人可以帮助我,我将不胜感激。我对 Go 和 Angular 都是新手,并且仍在学习如何让它们相互交互。
解决方案
进行如下更改:
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;
}));
}
推荐阅读
- python - 删除数据框系列的数组列中带有空格的空字符串(“”)
- configuration - NetCore 项目 - Nuget 配置无效
- swift - 充满活力的背景中的标签和 NSView
- azure - MS Azure - 发布服务器地址
- presto - Presto SQL - 在选择性分组中不同
- regex - 从 wordpress 中的基本 URL 中删除类别
- javascript - Javascript隐藏和显示div以输入密码
- wordpress - 从 Wordpress 中博客文章的永久链接 URL 中删除子类别的问题
- apache-spark - Zeppelin 是否可以限制用户创建笔记?
- postgresql - 为什么我得到一个 org.springframework.orm.jpa.JpaSystemException 而不是一个 DataIntegrityException 用于休眠弹簧启动?