ত্রুটি হ্যান্ডলিং

ভ্রমণকারী হ্যান্ডলার এবং মিডলওয়্যার চালানোর সময় যেসব ত্রুটি ঘটতে পারে, তা ফাইবার যখন দক্ষিত করে এবং প্রসেস করতে হয়, তা ক্যাচ করা গুরুত্বপূর্ণ।

  • উদাহরণ
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
    }

    // Content-Type সেট করুন: text/plain; charset=utf-8
    c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)

    // স্থিতি কোড এবং ত্রুটির বার্তা পাঠিয়ে দিন
    return c.Status(code).SendString(err.Error())
}

কাস্টম এরর হ্যান্ডলার

ফাইবার ইনস্ট্যান্স ব্যবহার করে কাস্টম এরর হ্যান্ডলার সেট করতে পারেন যখন Config ব্যবহার করে ফাইবার ইনিশিয়েলাইজ করেন।

সাধারণভাবে, ডিফল্ট এরর হ্যান্ডলার যথেষ্ট হওয়া উচিত। তবে, যদি আপনি বিভিন্ন প্রকারের ত্রুটি ধরতে চান এবং সাথে সাথে প্রাপ্ত পদক্ষেপ গ্রহণ করতে চান, মাধ্যমে বিভিন্ন প্রকারের ত্রুটি ধরতে এবং সেগুলির দ্বারা যোগাযোগ করতে চান, যোগাযোগের জন্য বিভিন্ন প্রকার প্রাপ্ত পদক্ষেপ। আপনি ক্লায়েন্টকে বিভিন্ন ধরনের অপেক্ষায়িত প্রতিক্রিয়া পাঠাতে পারেন, যোগাযোগ এবং মুধাতম তৈরিতে ক্লায়েন্টকে কাস্টম উত্তর পাঠাতে পারেন।

নীচের উদাহরণ দেখায় যেভাবে বিভিন্ন প্রকারের ত্রুটির জন্য ত্রুটি পেজ প্রদর্শন করতে পারেন।

  • উদাহরণ
// কাস্টম কনফিগারেশন সহ নতুন ফাইবার ইন্স্ট্যান্স তৈরি করুন
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
    },
})

// ...