我有一条接受DELETE请求的路由,我知道使用Express可以添加
<input type="hidden" name="_method" value="delete" />
到向网址发送POST请求的表单。
但是,如何使用链接而不是表单来执行此操作?
答案 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
添加到查询字符串中。