Skip to content

Method Override 中间件

该中间件会根据表单、请求头或查询参数中的配置,将请求转交给与原始方法不同的处理器并返回其响应。

导入

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

用法

ts
const app = new Hono()

// 未传入选项时,会读取表单中的 `_method` 字段,例如 DELETE,作为要执行的请求方法。
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' }))

选项

required app:Hono

应用中使用的 Hono 实例。

optional form:string

包含方法名的表单字段名称,默认值为 _method

optional header:boolean

包含方法名的请求头名称。

optional query:boolean

包含方法名的查询参数名称。

Released under the MIT License.