میانافزار حل کننده مسیر (RoutingResolver)
میانافزار حل کننده مسیر مسئول یافتن و تطبیق مسیرهای درخواست با routeهای تعریف شده است.
هدف
این میانافزار مسیر درخواست را با routeهای تعریف شده در برنامه مقایسه کرده و route مناسب را پیدا میکند. همچنین پارامترهای مسیر را استخراج و تنظیم میکند.
نحوه کار
- نرمالسازی مسیر درخواست
- بارگذاری routeهای برنامه مورد نظر (API, Web)
- مقایسه مسیر با routeهای تعریف شده
- استخراج پارامترهای مسیر
- تنظیم اطلاعات route در درخواست
ساختار Route
interface HttpRoute {
path: string; // مسیر route
methods: string[]; // متدهای HTTP مجاز
method?: string; // متد HTTP (اختیاری)
apiVersion?: string; // نسخه API (پیشفرض: v1)
// ... سایر تنظیمات
}
تطبیق مسیر
پارامترهای مسیر
// تعریف route با پارامتر
{
path: "/users/{id:number}",
methods: ["get"]
}
// درخواست: /users/123
// نتیجه: params = { id: 123 }
پارامترهای اختیاری
// پارامتر اختیاری
{
path: "/users/{id:number?}",
methods: ["get"]
}
Wildcard
// تطبیق همه زیرمسیرها
{
path: "/files/*",
methods: ["get"]
}
نسخه API
برای درخواستهای API، نسخه API از URL استخراج میشود:
/api/v1/users -> apiVersion: "v1"
/api/v2/posts -> apiVersion: "v2"
خطاها
404 Not found: مسیر یافت نشد404 Can not find matched route: هیچ route مناسبی یافت نشد
مثال استفاده
// تعریف route در برنامه
{
path: "/users/{id:number}/posts/{slug:string?}",
methods: ["get", "post"],
controller: "UserController",
action: "getPosts"
}
// درخواست: GET /api/v1/users/123/posts/my-post
// نتیجه:
// params = { id: 123, slug: "my-post" }
// routeInfo.index = 0 (ایندکس route)
// routeInfo.params = params