ក្បួន​កណ្តាល ​ដែល​ភាសា​អង់គ្លេស​​ហៅ​ថា middleware គឺ​ជា​ក្បួន​ពិសេស​ម៉្យាង​ដែល​នឹង​ត្រូវ​យក​ទៅ​ប្រើ​ជា​ស្វ័យប្រវត្តិ នៅ​គ្រប់​ការចូលទៅ​តាម​ផ្លូវ​ទៅ​កាន់​ឯកសារ​ទាំងឡាយ​។ យើង​អាច​ប្រើប្រាស់​ក្បួន​នេះ​ក្នុងការ​កែប្រែ​ឬ​បន្ថែម​ទិន្នន័យ​ថ្មី​សំរាប់​ឯកសារទាំងនោះ​​បាន។ ការបង្កើត​ក្បួន​កណ្តាល​ត្រូវ​ធ្វើឡើង​នៅ​ក្នុង​ឯកសារ​មួយ​មាន​ឈ្មោះ​ថា middleware.js ឬ middleware.ts នៅ​ក្នុង​ថត src ។

 

// src/middleware.js

export function onRequest ({ locals, request }, next) {
    locals.title = "ចំណង​ជើង"
    return next()
}

 

ក្បួន​កណ្តាលត្រូវ​មាន​ឈ្មោះ​ថា onRequest( ) ដែល​ត្រូវ​នាំ​ចេញ​ដោយ​បញ្ជា export ។ នៅ​ពេល​ត្រូវ​យក​ទៅ​ប្រើ ក្បួន​កណ្តាល​នឹង​ទទួល​បាន​នូវ​វត្ថុ​ដែល​ជា​សំណុំ​ទិន្នន័យ​មួយ​មាន​ឈ្មោះ​ថា context និង​វត្ថុ​ដែល​ជា​ក្បួន​មួយ​មាន​ឈ្មោះ​ថា next( ) ជា​ស្វ័យប្រវត្តិ។ នៅ​ក្នុង​សំណុំ​ទិន្នន័យ context ​មាន​សំណុំ​ទិន្នន័យ locals និងសំណុំ​ទិន្នន័យ request ដែល​​យើង​អាច​ស្រង់​យកមក​​ប្រើ​ទៅ​តាម​សេចក្តី​ត្រូវការ​។ ​​​​​​​​​​យើងចាំបាច់​ត្រូវ​​យក​ក្បួន​ឈ្មោះ next( ) មក​ប្រើ​និង​បញ្ជូល​លទ្ធផល​ចេញ​ទៅ​ក្រៅ ដើម្បី​អាច​អោយ​ឯកសារ​ដទៃ​ទៀត​អាច​ត្រូវ​យក​មក​ប្រើ​បាន​។

 

ដោយឡែក ​សំណុំ​ទិន្នន័យ locals អាច​ត្រូវ​យក​មក​ប្រើ​សំរាប់​កែប្រែ​ទិន្នន័យ​នៅ​ក្នុ​ង​នោះ​ និងឬបន្ថែម​ទិន្នន័យ​ថ្មី​ចូលទៅ​ក្នុង​នោះ​​។ សំណុំ​ទិន្នន័យ locals នឹង​​ត្រូវ​ផ្តល់​អោយ​ទៅ​សំណុំ​ទិន្នន័យ​សកល Astro ដែលនៅ​ក្នុង​នោះ យើង​​អាច​ស្រង់​យក​សំណុំ​ទិន្នន័យ locals មក​ប្រើ​នៅ​ក្នុង​ឯកសារ Astro បាន​គ្រប់​ពេល​វេលា។

 

<!--src/pages/index.astro-->
---
const data = Astro.locals
---

<p>ទិន្នន័យ​ដែល​ត្រូវ​បញ្ជូន​មក៖ {data.title}</p>

 

នៅ​ក្នុង​ក្បួន​ចុង​ផ្លូវ យើង​ក៏​អាច​ស្រង់​យក​សំណុំ​ទិន្នន័យ locals ពី​សំណុំ​ទិន្នន័យ context មក​ប្រើ​បាន​ដែរ ដោយ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

 

// src/pages/api/info.js

export async function GET({locals}){
    return new Response(JSON.stringify(locals))
}

 

<!--src/pages/index.astro-->
---
const response = await fetch("http://localhost:4321/api/info")
const data = await response.json()
---

<p>ទិន្នន័យ​ដែល​ត្រូវ​បញ្ជូន​មក៖ {data.title}</p>