Fiber ialah sambungan PHP yang cekap untuk membina aplikasi tak segerak, coroutine dan serentak. Pengendalinya boleh menerima permintaan untuk pelbagai jenis kandungan ralat, seperti JSON, XML, dsb. Dengan Fiber, pembangun boleh mengendalikan permintaan dalam format yang berbeza dengan lebih fleksibel dan mengendalikan ralat dengan sewajarnya. Ini membolehkan pembangun mengurus dan menyelenggara aplikasi mereka dengan lebih baik, meningkatkan keteguhan dan kebolehselenggaraan kod. Dalam artikel ini, kami akan mendalami cara Fiber mengendalikan pelbagai jenis ralat permintaan dan memberikan nasihat serta petua berguna untuk pembangun.
Saya menggunakan gentian 2.44.0
和 go 1.20
构建一个简单的 restful api。我目前正在测试是否可以为给定的处理程序强制执行可接受的内容(非常常见的事情),但看起来我做错了什么,或者 fibre.ctx.accepts
dan ia tidak berfungsi seperti yang saya jangkakan.
Ini adalah laluan yang sangat mudah yang saya tentukan. Nota ctx.accepts
的用法...但是我使用什么 accept
Pengepala http tidak penting, semua permintaan akan lulus.
// app.go func main() { config := fiber.Config{ StrictRouting: true, } app := fiber.New(config) app.Use(logger.New(), recover.New()) app.Get("/", handlers.RootHandler) log.Fatal(app.Listen(":8080")) } // ============================================================================ // handlers/handlers.go func RootHandler(ctx *fiber.Ctx) error { ctx.Accepts(fiber.MIMETextPlain, fiber.MIMETextPlainCharsetUTF8) ctx.Set(fiber.HeaderContentType, ctx.GetReqHeaders()[fiber.HeaderAccept]) return ctx.Status(fiber.StatusOK).SendString("Hello, world!") }
Adakah terdapat cara untuk mengelakkan tingkah laku ini dan mengkonfigurasi pengendali/halaan dengan betul?
Tandatangan fungsi ini ialah:
func (c *ctx) accepts(offers ...string) string
Ia akan mengembalikan petikan yang boleh diterima daripada petikan yang anda berikan kepada fungsi ini. Jika pengepala accept
dalam permintaan tidak sepadan dengan mana-mana tawaran, ia akan mengembalikan rentetan kosong (lihat Pelaksanaan). Jadi, jika anda ingin memaksa pengendali tertentu untuk menerima sesuatu yang boleh diterima, anda boleh menyemak sama ada nilai pulangan ialah rentetan kosong:
func RootHandler(ctx *fiber.Ctx) error { if offer := ctx.Accepts(fiber.MIMETextPlain, fiber.MIMETextPlainCharsetUTF8); offer == "" { return ctx.SendStatus(fiber.StatusNotAcceptable) } // ... }
Atas ialah kandungan terperinci Pengendali gentian menerima permintaan dengan jenis kandungan yang salah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!