我正在以某种方式获得http 422响应: 状态代码:422 Unprocessable Entity
fmt.Println(c)的控制台消息是:
& {{0xc04227c1c0 -1 200} 0xc0421b2100 0xc042086d10 [] [0x8fdc00 0x8fe950 0x97e310 0x97cf80] 3 0xc0421ea5a0 map [] []}
地图应填写myEmail和myPassword,但它不会。请帮帮我。
身体是否有问题,或者是与网络api有关的事情?
这是我的http请求:
this.http.post('http://localhost:8080/api/v1/users', {'email': 'myEmail', 'password': 'myPassword'}, httpOptions)
.subscribe(data => {
console.log('register___', data);
});
这是httpOptions:
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json'
, 'Access-Control-Allow-Origin': '*'
, 'Access-Control-Allow-Headers': 'access-control-allow-origin, access-control-allow-headers'})
};
以下是我使用的网页Api:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_ "github.com/mattn/go-sqlite3"
)
type Users struct {
email string `gorm:"not null" form:"email" json:"email"`
password string `gorm:"not null" form:"password" json:"password"`
}
func InitDb() *gorm.DB {
// Openning file
db, err := gorm.Open("sqlite3", "./data.db")
// Display SQL queries
db.LogMode(true)
// Error
if err != nil {
panic(err)
}
// Creating the table
if !db.HasTable(&Users{}) {
db.CreateTable(&Users{})
db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&Users{})
}
return db
}
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Add("Access-Control-Allow-Origin", "http://localhost:4200")
c.Next()
}
}
func main() {
r := gin.Default()
r.Use(Cors())
v1 := r.Group("api/v1")
{
v1.POST("/users", PostUser)
v1.OPTIONS("/users", OptionsUser)
v1.GET("/users", GetUsers)
v1.GET("/users/:id", GetUser)
v1.PUT("/users/:id", UpdateUser)
v1.DELETE("/users/:id", DeleteUser)
}
r.Run(":8080")
}
func PostUser(c *gin.Context) {
fmt.Println("___herewego___")
db := InitDb()
defer db.Close()
var user Users
c.Bind(&user)
fmt.Println(c)
fmt.Println("_____")
fmt.Println(user)
if user.email != "" && user.password != "" {
fmt.Println("geldim gördüm gidiyorum.....................")
// INSERT INTO "users" (name) VALUES (user.Name);
db.Create(&user)
// Display error
c.JSON(201, gin.H{"success": user})
} else {
// Display error
c.JSON(422, gin.H{"error": "Fields are empty"})
}
// curl -i -X POST -H "Content-Type: application/json" -d "{ \"email\": \"Thea\", \"password\": \"Queen\" }" http://localhost:8080/api/v1/users
}
func GetUsers(c *gin.Context) {
// Connection to the database
db := InitDb()
// Close connection database
defer db.Close()
var users []Users
// SELECT * FROM users
db.Find(&users)
// Display JSON result
c.JSON(200, users)
// curl -i http://localhost:8080/api/v1/users
}
func GetUser(c *gin.Context) {
// Connection to the database
db := InitDb()
// Close connection database
defer db.Close()
email := c.Params.ByName("email")
var user Users
// SELECT * FROM users WHERE id = 1;
db.First(&user, email)
if user.email != "" {
// Display JSON result
c.JSON(200, user)
} else {
// Display JSON error
c.JSON(404, gin.H{"error": "User not found"})
}
// curl -i http://localhost:8080/api/v1/users/1
}
func UpdateUser(c *gin.Context) {
// Connection to the database
db := InitDb()
// Close connection database
defer db.Close()
// Get id user
email := c.Params.ByName("email")
var user Users
// SELECT * FROM users WHERE id = 1;
db.First(&user, email)
if user.email != "" && user.password != "" {
if user.email != "" {
var newUser Users
c.Bind(&newUser)
result := Users{
email: newUser.email,
password: newUser.password,
}
// UPDATE users SET email='newUser.email', password='newUser.password' WHERE id = user.Id;
db.Save(&result)
// Display modified data in JSON message "success"
c.JSON(200, gin.H{"success": result})
} else {
// Display JSON error
c.JSON(404, gin.H{"error": "User not found"})
}
} else {
// Display JSON error
c.JSON(422, gin.H{"error": "Fields are empty"})
}
// curl -i -X PUT -H "Content-Type: application/json" -d "{ \"email\": \"Thea\", \"password\": \"Merlyn\" }" http://localhost:8080/api/v1/users/1
}
func DeleteUser(c *gin.Context) {
// Connection to the database
db := InitDb()
// Close connection database
defer db.Close()
// Get id user
email := c.Params.ByName("email")
var user Users
// SELECT * FROM users WHERE id = 1;
db.First(&user, email)
if user.email != "" {
// DELETE FROM users WHERE id = user.Id
db.Delete(&user)
// Display JSON result
c.JSON(200, gin.H{"success": "User #" + email + " deleted"})
} else {
// Display JSON error
c.JSON(404, gin.H{"error": "User not found"})
}
// curl -i -X DELETE http://localhost:8080/api/v1/users/1
}
func OptionsUser(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Methods", "DELETE,POST, PUT")
c.Writer.Header().Set("Access-Control-Allow-Headers", "access-control-allow-headers,access-control-allow-origin,content-type")
c.Next()
}
答案 0 :(得分:0)
您需要导出数据结构中的字段:
type Users struct {
Email string `gorm:"not null" form:"email" json:"email"`
Password string `gorm:"not null" form:"password" json:"password"`
}
它们目前尚未导出,因此仅对您的包装可见。这意味着编组/解组数据结构的包将无法查看字段。