在 nodejs Express app 中的链接中发送 DELETE 请求

Sending DELETE request in a link in nodejs express app

本文关键字:DELETE 请求 链接 nodejs Express app      更新时间:2023-09-26

我有一个接受删除请求的路由,我知道使用 Express 您可以添加

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

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

但是,您将如何使用链接而不是表单来执行此操作?

GET 请求不支持这样做:

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

这是有道理的,因为否则即使使用 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(methodOverride).use(methodOverrideGET),然后只需将_method=DELETE添加到查询字符串中即可。