img-adonis
#fullstack

Middleware

Middleware adalah kode yang dijalankan sebelum (atau sesudah) request masuk ke controller.

cara membuat middleware:

node ace make:middleware Auth

Dipakai buat:

Stack Middleware

  1. Server middleware

    • Jalan di semua HTTP request, bahkan jika URL tidak punya route.
    • Contoh: static assets middleware.
    • Registernya ada disini:
    import server from '@adonisjs/core/services/server'
    server.use([() => import('...')])

  2. Router middleware (global middleware)

    • Middleware yang jalan di semua request yang memiliki route yang match.
    • Contoh: body parser, session, auth.
    • Registernya ada disini:
    import router from '@adonisjs/core/services/router'
    router.use([() => import('...')])

  3. Named middleware

    • Middleware yang tidak otomatis dijalankan kecuali di-assign di route atau group.
    • Registernya ada disini:
    import router from '@adonisjs/core/services/router'
    router.named({
      auth: () => import('#middleware/auth_middleware'),
    })
    • Baru nanti di route:
    Route.get('/xxx', '…').middleware('auth')

Format middleware

import { HttpContext } from '@adonisjs/core/http'
import { NextFn } from '@adonisjs/core/types/http'

export default class UserLocationMiddleware {
  async handle(ctx: HttpContext, next: NextFn) {
    // 
    await next()
    // 
  }
}

Dalam method handle, kita bisa:

Assign middleware ke routes & groups

import { middleware } from '#start/kernel'

router.get('posts', () => {}).use(middleware.userLocation())
// atau
router.get('payments', () => {}).use([middleware.auth(), middleware.userLocation()])
router
  .group(() => {
    router.get('posts', () => {})
    router.get('users', () => {})
  })
  .use(middleware.userLocation())