2017-12-30 71 views
-1

Imは何とかHTTP 422応答取得しています: ステータスコード:422処理不能エンティティHTTPリクエストがGO TO =>ステータスコード:422処理不能エンティティ

fmt.Println(C)のコンソールメッセージは、次のとおりです。

& {{0xc04227c1c0 -1 200} 0xc0421b2100 0xc042086d10 [] [0x8fdc00 0x8fe950 0x97e310 0x97cf80] 3 0xc0421ea5a0マップ[] []}

マップmyEmailとMYPASSWORDを満たさなければならないが、それは私を助けるdoesnt.Please。

ボディに何か問題がありますか、それともウェブAPIに関連するものですか?ここで

は私のhttpリクエストである:ここで

this.http.post('http://localhost:8080/api/v1/users', {'email': 'myEmail', 'password': 'myPassword'}, httpOptions) 
      .subscribe(data => { 
      console.log('register___', data); 
     }); 

はhttpOptionsです:あなたはする必要があり

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("https://stackoverflow.com/users/:id", GetUser) 
     v1.PUT("https://stackoverflow.com/users/:id", UpdateUser) 
     v1.DELETE("https://stackoverflow.com/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

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'}) 
}; 

ここで私が使用している、外出先のWeb APIですデータ構造内のフィールドをエクスポートします。

type Users struct { 
    Email string `gorm:"not null" form:"email" json:"email"` 
    Password string `gorm:"not null" form:"password" json:"password"` 
} 

現在のところ、これらの商品はアンエクスポートされているため、お客様のパッケージにのみ表示されます。つまり、データ構造を整列化/非整列化するパッケージはフィールドを見ることができません。

+0

私はそれをどのように正確に行うことができますか? – Apak

+0

私の答えには、あなたのコードがどのように表示されるべきかが含まれています。エクスポートされた名前は大文字です。私は[Go tour](https://tour.golang.org)に参加してGoのことを理解することをお勧めします。 – Marc

+0

アドバイスありがとうございます私はそれには – Apak

関連する問題