在 Web 应用程序中,使用 HTTP 协议时,通常只能发送 GET 和 POST 请求。但有些情况下,我们需要发送 PUT、DELETE 或者其他类型的请求。而这些请求并不能直接通过 HTML 表单提交。
method-override
是一个 Node.js 的中间件,它使得我们可以在 HTML 表单中使用伪造的 HTTP 方法来提交请求。本文将介绍如何使用 method-override
来处理这种情况,同时提供一些示例代码帮助你更好地理解。
安装
在开始使用前,需要先安装 method-override
:
--- ------- ---------------
基本用法
要启用 method-override
,需要做两件事:
- 在 Express 应用程序中加载中间件;
- 在表单中添加隐藏域
_method
并设置其值为所需的 HTTP 方法。
以下是示例代码:
----- ------- - ------------------- ----- -------------- - --------------------------- ----- --- - ---------- -- -- --------------- --- ----------------------------------- -- ---- --------------------- ----- ---- -- - -- -- --- -- --- ------------------------ ----- ---- -- - -- -- ------ -- --- ---------------- -- -- -----------------------
在上面的代码中,我们首先加载了 method-override
中间件,并指定了在表单中使用的伪造方法名称为 _method
。然后,我们定义了两个路由来处理 PUT
和 DELETE
请求。这些请求将通过 HTML 表单中隐藏域 _method
的值来触发。
现在,我们可以创建一个表单来发送 PUT
或 DELETE
请求。例如:
----- ------------- -------------------------------- ------ ------------- -------------- ------------ ---- ------ --- ------- --------------------------- ------- ----- ------------- ----------------------------------- ------ ------------- -------------- --------------- ------- --------------------------- -------
如上面的代码所示,在提交表单时,我们需要将表单的方法设置为 POST
,并将要伪造的 HTTP 方法名添加到 URL 参数中(例如 ?_method=PUT
)。然后,在表单中添加一个隐藏域 _method
并设置其值为要伪造的 HTTP 方法。最后,添加其他表单字段和提交按钮。
配置
method-override
提供了一些配置选项来自定义其行为。
自定义方法名称
默认情况下,method-override
使用 _method
作为伪造方法名称。但是,你也可以使用其他名称。例如:
----------------------------------------
在这里,我们将伪造方法名称设置为 X-HTTP-Method
。这意味着在表单中添加隐藏域时,我们需要将其名称设置为 X-HTTP-Method-Override
。
----- ------------- -------------------------------- ------ ------------- ----------------------------- ------------ ---- ------ --- ------- --------------------------- -------
自定义获取方法
默认情况下,method-override
将从请求对象中读取以下字段来获取伪造方法:
_method
请求参数;X-HTTP-Method-Override
请求头;X-HTTP-Method
请求头。
但是,你可以自定义获取方法。例如:
---------------------------- ---- -- - -- ------------------------------ - ------ ---------------------------- - ---
在这里,我们使用了一个函数来获取伪
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/50681