การจัดการพารามิเตอร์คำขอต่าง ๆ ในเฟรมเวิร์ก Go Fiber
ตัวอย่างที่ง่าย
พารามิเตอร์คำขอทั้งหมดในเฟรมเวิร์ก Fiber สามารถได้รับได้ผ่านอ็อบเจ็กต์คอนเท็กซ์ Ctx
ดังนี้
app.Get("/user/:name?", func(c *fiber.Ctx) error {
// ได้รับพารามิเตอร์ผ่านพารามิเตอร์ Ctx ของฟังก์ชันเส้นทาง และเรียกวิธีที่เหมาะสม
// ที่นี่ พารามิเตอร์ชื่อถูกได้รับผ่าน Params
return c.SendString(c.Params("name"))
})
การได้รับพารามิเตอร์เส้นทาง
การได้รับพารามิเตอร์จากเส้นทาง URL
// GET http://example.com/user/fenny
app.Get("/user/:name", func(c *fiber.Ctx) error {
c.Params("name") // "fenny"
// ...
})
// GET http://example.com/user/fenny/123
app.Get("/user/*", func(c *fiber.Ctx) error {
c.Params("*") // "fenny/123"
c.Params("*1") // "fenny/123"
c.Params("*", "default value") // สามารถตั้งค่าเริ่มต้นได้ด้วยพารามิเตอร์ตัวที่สอง
})
การได้รับพารามิเตอร์ชนิด Int ของเส้นทาง
// GET http://example.com/user/123
app.Get("/user/:id", func(c *fiber.Ctx) error {
id, err := c.ParamsInt("id") // int 123 และไม่มีข้อผิดพลาด
// ...
})
การได้รับพารามิเตอร์คิวรีของคำขอ GET
// GET http://example.com/?order=desc&brand=nike
app.Get("/", func(c *fiber.Ctx) error {
c.Query("order") // "desc"
c.Query("brand") // "nike"
// สามารถใช้พารามิเตอร์ที่สองเพื่อตั้งค่าเริ่มต้น ซึ่งจะได้รับค่ากลับถ้าพารามิเตอร์ไม่มีอยู่
c.Query("empty", "nike") // "nike"
// ...
})
การส่งคืนพารามิเตอร์คิวรีทั้งหมด
// GET http://example.com/?name=alex&want_pizza=false&id=
app.Get("/", func(c *fiber.Ctx) error {
m := c.Queries()
m["name"] // "alex"
m["want_pizza"] // "false"
m["id"] // ""
// ...
})
การผูกพารามิเตอร์คิวรีกับออบเจ็กต์สตรักต์
// กำหนดตัวสตรักต์เพื่อรับพารามิเตอร์
// ใช้แท็กคิวรีเพื่อระบุชื่อพารามิเตอร์ที่จะถูกผูก
type Person struct {
Name string `query:"name"`
Pass string `query:"pass"`
Products []string `query:"products"`
}
app.Get("/", func(c *fiber.Ctx) error {
// กำหนดตัวแปรสตรักต์เพื่อรับพารามิเตอร์
p := new(Person)
// ใช้ QueryParser เพื่อผูกพารามิเตอร์คิวรีกับตัวแปร p
if err := c.QueryParser(p); err != nil {
return err
}
log.Println(p.Name) // john
log.Println(p.Pass) // doe
log.Println(p.Products) // [shoe, hat]
// ...
})
// ดำเนินคำสั่ง curl ต่อไปนี้เพื่อทดสอบ
// curl "http://localhost:3000/?name=john&pass=doe&products=shoe,hat"
การได้รับพารามิเตอร์ฟอร์มคำขอ POST
app.Post("/", func(c *fiber.Ctx) error {
// ได้รับค่าแรกจากคอนเท็กต์ฟอร์ม "name":
c.FormValue("name")
// => "john" หรือ "" ถ้าไม่มีอยู่
// ...
})
การจัดการพารามิเตอร์ของร่างกาย
มันใช้สำหรับการประมวลผลคำขอ POST/PUT และรองรับพารามิเตอร์แบบ JSON, XML, และฟอร์ม
// กำหนด struct เพื่อรับพารามิเตอร์และกำหนดชื่อฟิลด์พารามิเตอร์ที่คุณต้องการรับผ่านแท็ก json, xml, และ form
// สามารถเลือก json, xml, form ตามต้องการ; ไม่จำเป็นต้องรวมทั้งหมด
type Person struct {
Name string `json:"name" xml:"name" form:"name"`
Pass string `json:"pass" xml:"pass" form:"pass"`
}
app.Post("/", func(c *fiber.Ctx) error {
// กำหนดตัวแปร struct เพื่อรับพารามิเตอร์
p := new(Person)
// ใช้ BodyParser เพื่อผูกพารามิเตอร์ร่างกายกับตัวแปร p
if err := c.BodyParser(p); err != nil {
return err
}
log.Println(p.Name) // john
log.Println(p.Pass) // doe
// ...
})
// ตัวอย่างของการร้องขอชนิดต่าง ๆ สำหรับการร้องขอพารามิเตอร์รูปแบบ JSON โปรดจำไว้ที่จะตั้ง Content-Type: application/json
// curl -X POST -H "Content-Type: application/json" --data "{\"name\":\"john\",\"pass\":\"doe\"}" localhost:3000
// curl -X POST -H "Content-Type: application/xml" --data "<login><name>john</name><pass>doe</pass></login>" localhost:3000
// curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --data "name=john&pass=doe" localhost:3000
// curl -X POST -F name=john -F pass=doe http://localhost:3000
// curl -X POST "http://localhost:3000/?name=john&pass=doe"
วิธีดึงข้อมูลร่างกายต้นฉบับคือดังนี้:
// curl -X POST http://localhost:8080 -d user=john
app.Post("/", func(c *fiber.Ctx) error {
// ใช้อาร์กิวเมนต์ BodyRaw เพื่อส่งข้อมูลร่างกายแบบดิบ
return c.Send(c.BodyRaw()) // []byte("user=john")
})
การดึงหัวข้อคำขอ
app.Get("/", func(c *fiber.Ctx) error {
c.Get("Content-Type") // "text/plain"
c.Get("CoNtEnT-TypE") // "text/plain"
c.Get("something", "john") // "john"
// ...
})
การดึง IP ของไคลเอนต์
app.Get("/", func(c *fiber.Ctx) error {
c.IP() // "127.0.0.1"
// ...
})
หากคุณติดตั้งบนเซิร์ฟเวอร์ที่ใช้พร็อกซีหรือโหลดบาลานเซอร์ คุณต้องดึง IP ของไคลเอนต์ผ่านหัวข้อ x-forwarded-for โดยการตั้งค่าตามนี้:
app := fiber.New(fiber.Config{
ProxyHeader: fiber.HeaderXForwardedFor,
})
การอ่านคุกกี้
app.Get("/", func(c *fiber.Ctx) error {
// รับคุกกี้ตามคีย์:
c.Cookies("name") // "john"
c.Cookies("empty", "doe") // "doe"
// ...
})