Honoxで動的な値をmiddlewareで設定する場合はcontext.set/getを使う
Honoxでページを作成する際、サイト全体で利用したい動的な値を設定する方法について解説されています。middlewareとcontextを使用して解決策を示し、例としてAPIのアドレスを動的に設定するコードが示されています。環境変数を使用する方法と比較しつつ、ステージングやプレビューデプロイでも利用できる利点が紹介されています。さらに、取得した値にTypeScriptの型情報を追加する方法も提案されています。
広告ここから
広告ここまで
目次
Honoxでページを作っている時、サイト全体で利用したい動的な値を設定したくなることがあります。例えば「本番とステージングで呼び出すAPIを変えたい」や「アクセスされた地域に応じてリダイレクトさせたい」のようなものがそうですね。これを設定する方法を簡単にまとめましたので紹介します。
middlewareとcontext
で設定する
解決策はとてもシンプルで、middlewareを使います。例えばアプリ内で利用するAPIのアドレスを動的にしたい場合、このようなコードを書きます。
const apiPathMiddleware = createMiddleware(async (c, next) => {
const host = c.req.header('host')
const protocol = c.req.header('x-forwarded-proto') ?? host?.startsWith('localhost') ? 'http' : 'https'
const apiBase = `${protocol}://${host}/api`
c.set('apiBase', apiBase)
await next()
})
環境変数を使ってもよいのですが、この方法であればステージング・プレビューデプロイなどでもそのパスを使えます。
context.get
で取得した値に、TypeScriptの型情報を設定したい場合は、このような型定義を追加しておくとよさそうです。
declare module 'hono' {
interface ContextVariableMap {
apiBase: string
}
}