Hono: Middleware

A middleware is a function that “hooks” into the routing process, performing any kind of operation.

You can hook into a Request before it’s processed, or a Response before it’s sent.

We have a lot of built-in middleware, and you can plug your own, or reuse any middleware released by the community.

I won’t go into creating your own, but it’s nice to see a couple examples of what middleware can do.

Logger

Simplest example: a logger.

import { logger } from 'hono/logger'

//...

app.use('*', logger())

This will print a log of all the server activity to the console:

Basic authentication

You can password protect a set of routes:

import { basicAuth } from 'hono/basic-auth'

//...
  
app.use('/dashboard', basicAuth({ 
  username: 'test', 
  password: 'test'
}))

  
app.get('/dashboard', (c) => { 
  return c.text('Logged in') 
})

You’ll see the page only if you add the correct credentials, otherwise you’ll see a “401 Unauthorized” message.

Implement CORS

import { cors } from 'hono/cors'  

//...

app.use('/api/*', cors())

(you can use tons of options)

Set cache headers

import { cache } from 'hono/cache'

//...

app.get(
  '*',
  cache({
    cacheName: 'my-app',
    cacheControl: 'max-age=3600',
  })
)

Set compression headers

import { compress } from 'hono/compress'

//...

app.use('*', compress())

… there’s a lot more, and you should check the official documentation.

Lessons in this unit:

0: Introduction
1: Your first Hono app
2: The Request object
3: Send a response to the client
4: Manage cookies
5: Work with HTTP headers
6: Handling redirects
7: Routing
8: JSX templates
9: ▶︎ Middleware
10: Hono on Node.js