برنامه نویسی

ایجاد ExpressJS خود را از ابتدا (قسمت 2) – Middlewares و Controllers

امروز می خواهم در مورد نحوه ایجاد یک Web Framework مانند Express.js بیشتر به شما نشان دهم. این قسمت 2 از مجموعه آموزشی است که من در حال ایجاد آن هستم. قسمت 1 را از دست دادید، اینجا را ببینید

می‌خواهیم میان‌افزار و کنترل‌کننده‌ها را برای مسیرهای خود اعمال کنیم، برای آن باید از آن استفاده کنیم middleware الگو. اگر می خواهید در مورد آن بیشتر بدانید، در پایان این آموزش لینکی را در اختیار شما قرار می دهم.

بیا شروع کنیم.


میان افزارها

src/app.js

// (1)
const dispatchChain = (request, response, middlewares) => {
    return invokeMiddlewares(request, response, middlewares)
}

// (2)
const invokeMiddlewares = async (request, response, middlewares) => {

    if (!middlewares.length) return;

    const currentMiddleware = middlewares[0];

    return currentMiddleware(request, response, async () => {
            await invokeMiddlewares(request, response, middlewares.slice(1));
    })
}
// (3) 
const serverHandler = async (request, response) => {
    const sanitizedUrl = sanitizeUrl(request.url, request.method)

    const match = matchUrl(sanitizedUrl)

    if (match) {
            const middlewaresAndControllers = routes.get(match)
            await dispatchChain(request, response, [...middlewaresAndControllers])
    } else {
            response.statusCode = 404
            response.end('Not found')
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از قسمت های کد بالا:

  1. را dispatchChain همانطور که از نام آن پیداست، زنجیره ای از توابع ارسال می شود.

  2. این یک کنترل کننده میان افزار است که مسئول اجرا و حذف تابع از آرایه میان افزار است، تا زمانی که دیگر تابعی برای اجرا وجود نداشته باشد.

  3. اکنون می توانیم خودمان را اصلاح کنیم serverHandler تابع، برای اجرای میان افزارها برای مسیر فعلی.


آزمایش کردن

index.js

const App = require('./src/app')

const app = App()


app.get('/test/test2', function test() { }, function test2() { })
app.post('/test', (req, res) => console.log('test'))
app.patch('/test', (req, res) => console.log('test'))
app.put('/test', (req, res) => console.log('test'))
app.del('/test', (req, res) => console.log('test'))

// (1)
const mid1 = (req, res, next) => {
    console.log('mid1')
    next()
}
// (2)
const mid2 = (req, res, next) => {
    console.log('mid2')
    next()
}
// (3)
const controller = (req, res) => {
    console.log('controller')
    res.end('controller')
}
// (4)
app.get('/middleware', mid1, mid2, controller)



const start = async () => {
    app.run(3000)
}

start()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از قسمت های کد بالا:

  1. اولین تابع میان افزار با استفاده از next تابعی برای انتقال به میان افزار بعدی.

  2. تابع میان افزار دوم با استفاده از next تابعی برای انتقال به میان افزار بعدی.

  3. کنترل کننده برای مسیریابی بدون next تابع. در اینجا ما می توانیم چیزی را به عنوان یک پیام به مشتری برگردانیم.

  4. استفاده از میان افزار و کنترلر در یک مسیر.

اعمال الگوی میان افزار چندان دشوار نیست، در چند خط کد می توانید از آن در برنامه خود استفاده کنید.

در این لینک می توانید اطلاعات بیشتری در مورد middleware الگو.

همچنین، می توانید به کد اینجا نگاهی بیندازید

برای دریافت مطالب بیشتر من را دنبال کنید.

با تشکر!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا