find-my-way: روتر HTTP فوقالعاده سریع برای Node.js
خلاصهٔ کاملتر
find-my-way یه روتر HTTP کاملاً مستقل از فریمورک هست که برای Node.js طراحی شده. زیر هودش از یه ساختار داده به اسم Radix Tree (یا Prefix Tree فشرده) استفاده میکنه که باعث میشه مسیریابی با کمترین overhead ممکن انجام بشه. اگه دنبال یه روتر هستی که هم سریع باشه و هم بدون وابستگی به فریمورک کار کنه، این کتابخونه دقیقاً همونیه که میخوای.
استفاده ازش خیلی سادست. کافیه روتر رو بسازی، مسیرها رو با متد on ثبت کنی و بعد از lookup برای اتصال به سرور HTTP بهره ببری:
const http = require('http')
const router = require('find-my-way')()
router.on('GET', '/', (req, res, params) => {
res.end('{"message":"hello world"}')
})
const server = http.createServer((req, res) => {
router.lookup(req, res)
})
server.listen(3000)یه ویژگی مهم اینه که میتونی یه defaultRoute هم تعریف کنی که وقتی هیچ مسیری match نشد صدا زده بشه — مثلاً برای برگردوندن 404. همچنین گزینه onBadUrl هم هست که اگه URL ورودی فرمت اشتباهی داشت (مثل /hello/%world)، به جای defaultRoute این تابع اجرا میشه:
const router = require('find-my-way')({
onBadUrl: (path, req, res) => {
res.statusCode = 400
res.end(`Bad path: ${path}`)
}
})از نظر قابلیتها، find-my-way خیلی کامله. پشتیبانی از پارامترهای داینامیک (مثل /user/:id)، wildcard، و حتی مسیرهای نسخهبندیشده (Versioned Routes) داره. یعنی میتونی بر اساس هدر Accept-Version درخواست، handler متفاوتی اجرا کنی. علاوه بر اینا، متدهای کمکی مثل find، hasRoute، off (برای حذف مسیر)، و prettyPrint برای نمایش درختی مسیرها هم وجود داره.
یه نکته جالب اینه که این روتر از Constraint های سفارشی هم پشتیبانی میکنه. یعنی میتونی منطق تطبیق مسیر رو فراتر از URL ببری و بر اساس هر چیزی مثل هدرها یا محتوای request تصمیم بگیری. فریمورکهای معروفی مثل Fastify و Restify از همین کتابخونه زیر هودشون استفاده میکنن که نشوندهنده بلوغ و قابلیت اطمینان بالاش هست.
نکات کلیدی:
- روتر HTTP مستقل از فریمورک برای Node.js با سرعت بسیار بالا
- استفاده از ساختار Radix Tree برای مسیریابی بهینه
- پشتیبانی از پارامترهای داینامیک، wildcard، و مسیرهای نسخهبندیشده
- امکان تعریف
defaultRouteبرای مسیرهای ناشناخته وonBadUrlبرای URLهای بد - پشتیبانی از Constraint های سفارشی برای منطق تطبیق پیچیدهتر
- استفاده شده در پروژههای بزرگ مثل Fastify و Restify




