خرابی ہینڈلنگ

راستے ہینڈلرز اور مڈل ویئر کے دوران ہونے والی تمام خرابیوں کو فائبر کو ان کی کاپچرنگ اور پروسیسنگ کے لئے ہینڈلر فنکشن کو واپس کرنا ضروری ہے۔

  • مثال
app.Get("/", func(c *fiber.Ctx) error {
    // خرابی کو فائبر کو پاس کریں
    return c.SendFile("file-does-not-exist")
})

پہلے سے طے شدہ طریقے سے، فائبر پینک خرابیوں کا منصرف نہیں کرتا ہے۔ کسی بھی ہینڈلرز کی سٹیک میں پینک ہونے کی صورت میں گو پروگرام کو کریش ہونے سے بچانے اور ان سے باز آنے کے لئے، آپ کو مندرجہ ذیل Recover مڈل ویئر ضرور شامل کرنا ہوگا۔

  • مثال
package main

import (
    "log"

    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
    app := fiber.New()
	
	// پینک خرابیوں کو منصرف کرنے کے لئے ریکور مڈل ویئر استعمال کریں
    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("یہ پینک فائبر کے دوار میں پکڑا گیا ہے")
    })

    log.Fatal(app.Listen(":3000"))
}

آپ fiber.NewError() کے ساتھ فائبر کی کسٹم خرابی ساختار استعمال کرکے اضافی سٹیٹس کوڈز کو پاس کر سکتے ہیں۔ پیغام پاس کرنا اختیاری ہے، اگر خالی رکھا جائے تو یہ اسٹیٹس کوڈ پیغام (مثلاً، 404 برابر نا ملا) پر افتوق کرے گا۔

  • مثال
app.Get("/", func(c *fiber.Ctx) error {
    // 503 سروس دستیاب نہیں
    return fiber.ErrServiceUnavailable

    // 503 چھٹی پر جا رہے ہیں!
    return fiber.NewError(fiber.StatusServiceUnavailable, "چھٹی پر جا رہے ہیں!")
})

مقررہ خرابی ہینڈلر

فائبر مقررہ خرابی ہینڈلر فراہم کرتا ہے۔ عام خرابیوں کے لئے، جواب 500 انٹرنل سرور خرابی کے طور پر بھیجا جائے گا۔ اگر خرابی کی قسم fiber.Error ہو تو، جواب فراہم کردہ سٹیٹس کوڈ اور پیغام استعمال کرکے بھیجا جائے گا۔

  • مثال
// مقررہ خرابی ہینڈلر
var DefaultErrorHandler = func(c *fiber.Ctx, err error) error {
    // مقررہ سٹیٹس کوڈ 500 ہے
    code := fiber.StatusInternalServerError

    // اگر یہ *fiber.Error ہے، تو کسٹم سٹیٹس کوڈ حاصل کریں
    var e *fiber.Error
    if errors.As(err, &e) {
        code = e.Code
    }

    // کنٹینٹ ٹائپ: ٹیکسٹ/پلین; چارسٹ utf-8 کے قرار دے دیں
    c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)

    // سٹیٹس کوڈ اور خرابی پیغام بھیجیں
    return c.Status(code).SendString(err.Error())
}

کسٹم خرابی ہینڈلر

فائبر کونفگ کا استعمال کرتے وقت کسٹم خرابی ہینڈلر کو مقرر کرنے کا امکان ہے۔

زیادہ تر صورتوں میں، ڈیفالٹ خرابی ہینڈلر کافی ہونا چاہئے۔ البتہ، اگر آپ مختلف قسم کی خرابیوں کو گرفتار کرنا چاہتے ہیں اور محتمل عمل اختیار کرنا چاہتے ہیں، جیسے نوٹیفکیشن ای میلز بھیجنا یا خرابیوں کو ایک وسطی نظام میں لاگ کرنا تو، تو کسٹم خرابی ہینڈلر کارآمد ہوگا۔ آپ کلائنٹ کے لئے کسٹم جوابات بھی بھیج سکتے ہیں، مثلاً خرابی پیجز یا صرف ایک JSON جواب۔

مثال میں دکھایا گیا ہے کے کس طرح مختلف قسم کی خرابیوں کے لئے خرابی کے پیجز کو ڈسپلے کرنے کی ترتیب دی جا سکتی ہے۔

  • مثال
// نئے فائبر انسٹنس کو کسٹم ترتیب دیتے ہوئے بنائیں
app := fiber.New(fiber.Config{
    // ڈیفالٹ خرابی ہینڈلر کو اووررائیڈ کریں
    ErrorHandler: func(ctx *fiber.Ctx, err error) error {
        // مقررہ سٹیٹس کوڈ 500 ہے
        code := fiber.StatusInternalServerError

        // اگر یہ *fiber.Error ہے، تو کسٹم سٹیٹس کوڈ حاصل کریں
        var e *fiber.Error
        if errors.As(err, &e) {
            code = e.Code
        }

        // ایک کسٹم خرابی پیج بھیجیں
        err = ctx.Status(code).SendFile(fmt.Sprintf("./%d.html", code))
        if err != nil {
            // اگر SendFile فیل ہو جائے
            return ctx.Status(fiber.StatusInternalServerError).SendString("انٹرنل سرور خرابی")
        }

        // ہینڈلر سے واپسی کریں
        return nil
    },
})

// ...