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

时间:2012-05-23 22:41:30

标签: javascript http node.js rest express

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

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

到向网址发送POST请求的表单。

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

1 个答案:

答案 0 :(得分:1)

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(methodOverrideGET)之后.use(methodOverride) ,然后只需将_method=DELETE添加到查询字符串中。