Skip to content

メソッドオーバーライドミドルウェア

このミドルウェアでは、フォーム、ヘッダー、またはクエリの値によって、リクエストの実際のメソッドとは異なる指定されたメソッドのハンドラーを実行し、その応答を返します。

インポート

ts
import { Hono } from 'hono'
import { methodOverride } from 'hono/method-override'

使用

ts
const app = new Hono()

// If no options are specified, the value of `_method` in the form,
// e.g. DELETE, is used as the method.
app.use('/posts', methodOverride({ app }))

app.delete('/posts', (c) => {
  // ....
})

たとえば

HTMLフォームではDELETEメソッドを送信できないので、_methodという名前のプロパティに値DELETEを入れて送信することができます。すると、app.delete()のハンドラーが実行されます。

HTMLフォーム

html
<form action="/posts" method="POST">
  <input type="hidden" name="_method" value="DELETE" />
  <input type="text" name="id" />
</form>

アプリケーション

ts
import { methodOverride } from 'hono/method-override'

const app = new Hono()
app.use('/posts', methodOverride({ app }))

app.delete('/posts', () => {
  // ...
})

デフォルト値を変更したり、ヘッダー値やクエリ値を使用することができます

ts
app.use('/posts', methodOverride({ app, form: '_custom_name' }))
app.use(
  '/posts',
  methodOverride({ app, header: 'X-METHOD-OVERRIDE' })
)
app.use('/posts', methodOverride({ app, query: '_method' }))

オプション

必須 app: Hono

アプリケーションで使用されるHonoのインスタンスです。

オプション form: 文字列

メソッド名を含む値を持つフォームキーです。初期値は_methodです。

オプション header: boolean

メソッド名を含む値を持つヘッダー名です。

オプション query: boolean

メソッド名を含む値を持つクエリパラメータキーです。

MITライセンスの下でリリースされています。