Skip to content

LLM Resources

Middleware ​

Middleware functions are used to run custom logic before or after the main request handler. They can modify the request, add headers to the response, handle errors, perform authentication, logging, validation, and more. Middleware in backan is registered using app.use() and can be applied globally or scoped to specific routes.

Usage ​

js

import { 
App
} from 'backan'
const
app
= new
App
( )
app
.use('*', async (
c
,
next
) => {
const
start
=
Date
.
now
()
await
next
()
const
end
=
Date
.
now
()
c
.res.headers.set('X-Response-Time', `${
end
-
start
}`)
} )

Examples ​

🔍 Simple Logger ​

ts
import { App } from 'backan'
const app = new App()

app.use('*', async (c, next) => {
  console.log(`[${new Date().toISOString()}] ${c.req.method} ${c.req.url}`)
  await next()
})

🔐 Basic Authentication ​

ts
app.use('/admin/*', async (c, next) => {
  const token = c.req.header('authorization')
  if (token !== 'Bearer supersecrettoken') {
    return c.text('Unauthorized', 401)
  }
  await next()
})

📦 Enforce JSON Content-Type ​

ts
app.use('/api/*', async (c, next) => {
  if (c.req.header('content-type') !== 'application/json') {
    return c.json({ error: 'Only JSON requests are allowed' }, 415)
  }
  await next()
})

🧠 Add Data to Context ​

ts
app.use('/profile', async (c, next) => {
  c.set('userId', '1234') // example: add user ID
  await next()
})

app.get('/profile', (c) => {
  const userId = c.get('userId')
  return c.json({ userId })
})

🛑 Global Error Handler ​

ts
app.use('*', async (c, next) => {
  try {
    await next()
  } catch (err) {
    console.error('Unhandled error:', err)
    return c.json({ error: 'Internal Server Error' }, 500)
  }
})

📊 Response Time Header ​

ts
app.use('*', async (c, next) => {
  const start = performance.now()
  await next()
  const end = performance.now()
  c.res.headers.set('X-Response-Time', `${end - start}ms`)
})