我注意到,如果我提交的enctype="multipart/form-data"
表单中隐藏的_method输入设置为PUT
,则methodOverride函数将不会触发,导致该路由的404 POST
设置:
app.use(express.json());
app.use(express.urlencode());
...
app.use(express.methodOverride());
app.use(express.router());
app.put('/update', express.multipart(), function(req, res) { ... });
如果我在路由器中将 put 更改为 post ,一切正常。还可以在没有发送enctype="multipart/form-data"
的其他路由中放置和删除工作。
我尝试改变中间件的顺序,但没有运气。
任何帮助都会受到高度赞赏,因为谷歌搜索这个问题什么都没有!
提前致谢!
答案 0 :(得分:4)
要让methodOverride()
能够使用_method
的值,它需要{3}已经由3个正文解析器中的1个定义 - - json()
,urlencoded()
和multipart()
。
app.use(express.multipart());
app.use(express.methodOverride());
如果您希望将multipart()
与methodOverride()
一起用于选择路由,则可以使用req.body
同时使用中间件和呼叫app.all()
route,以便继续使用预期路由。
app.all('/update',
express.multipart(),
express.methodOverride(),
function (req, res, next) { next('route'); }
);
app.put('/update', function (req, res) {
// ...
});