0

我有一条接受 DELETE 请求的路线,我知道使用 Express 你可以添加

 <input type="hidden" name="_method" value="delete" />

到向 url 发送 POST 请求的表单。

但是,您将如何使用链接而不是表单来做到这一点?

4

1 回答 1

1

GET 请求不支持此操作:

methodOverride()仅检查req.body(POST 参数)和请求标头 - 都不能为常规链接设置(但是,即使它们使用 GET,您也可以在 AJAX 请求中设置自定义标头)。

这是有道理的,否则即使使用 CSRF 令牌也可能是一个主要问题。您永远无法知道浏览器何时会决定预取链接 - 因此 GET 请求不应执行诸如删除内容之类的操作。

如果你真的需要它并且不关心它的缺点,可以考虑编写一个自定义函数:

function methodOverrideGET(key) {
    key = key || "_method";
    return function methodOverrideGET(req, res, next) {
        if (req.originalMethod != req.method) {
            // already overridden => do not override again
            next();
            return;
        }

        req.originalMethod = req.method;
        if (req.query && key in req.query) {
            req.method = req.query[key].toUpperCase();
            delete req.query[key];
        }
        next();
    };
};

现在您可以.use(methodOverrideGET) .use(methodOverride)之后简单地添加_method=DELETE到查询字符串中。

于 2012-05-24T05:40:36.827 回答