ایجاد 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')
}
}
از قسمت های کد بالا:
-
را
dispatchChain
همانطور که از نام آن پیداست، زنجیره ای از توابع ارسال می شود. -
این یک کنترل کننده میان افزار است که مسئول اجرا و حذف تابع از آرایه میان افزار است، تا زمانی که دیگر تابعی برای اجرا وجود نداشته باشد.
-
اکنون می توانیم خودمان را اصلاح کنیم
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()
از قسمت های کد بالا:
-
اولین تابع میان افزار با استفاده از
next
تابعی برای انتقال به میان افزار بعدی. -
تابع میان افزار دوم با استفاده از
next
تابعی برای انتقال به میان افزار بعدی. -
کنترل کننده برای مسیریابی بدون
next
تابع. در اینجا ما می توانیم چیزی را به عنوان یک پیام به مشتری برگردانیم. -
استفاده از میان افزار و کنترلر در یک مسیر.
اعمال الگوی میان افزار چندان دشوار نیست، در چند خط کد می توانید از آن در برنامه خود استفاده کنید.
در این لینک می توانید اطلاعات بیشتری در مورد middleware
الگو.
همچنین، می توانید به کد اینجا نگاهی بیندازید
برای دریافت مطالب بیشتر من را دنبال کنید.
با تشکر!