Javascript 在nodejs express应用程序的链接中发送删除请求
我有一个接受删除请求的路由,我知道使用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令牌时,它也可能是一个主要问题。
<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?