Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在nodejs express应用程序的链接中发送删除请求_Javascript_Http_Node.js_Rest_Express - Fatal编程技术网

Javascript 在nodejs express应用程序的链接中发送删除请求

Javascript 在nodejs express应用程序的链接中发送删除请求,javascript,http,node.js,rest,express,Javascript,Http,Node.js,Rest,Express,我有一个接受删除请求的路由,我知道使用Express可以添加 <input type="hidden" name="_method" value="delete" /> 发送POST请求到url的表单 但是,如何使用链接而不是表单来执行此操作?GET请求不支持此操作: 仅检查req.body(POST参数)和请求头-不能为常规链接设置任何一个(但是,即使AJAX请求使用GET,也可以在其中设置自定义头) 这是有意义的,因为否则即使在使用CSRF令牌时,它也可能是一个主要问题。

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

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

发送POST请求到url的表单


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

GET请求不支持此操作:

仅检查
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();
    };
};

现在您可以
。在
之后使用(methodOverrideGET)
。使用(methodOverride)
然后只需将
\u method=DELETE
添加到查询字符串中即可。

谢谢!是的,我之前在研究
methodOverride
。我打算用它来删除会话,所以我不认为它的安全性影响有那么大?是的,在这种情况下它是无害的。但是对于类似的东西,我还是会使用AJAX…我想我需要在定制
methodOverride
中间件中显式地检查删除会话的路由,这样就不会有人将查询字符串参数注入另一个删除路由的url中,并尝试进行一些古怪的CSRF攻击。我想说AJAX的工作更少:p(无论如何,既然你的问题被回答了,请考虑接受这个答案)你可能是对的。出于好奇,你喜欢用什么框架/库来为你的Ajax解决方案?纯JavaScript,jQuery,ReBoo.js?