我注意到,如果我提交一个enctype="multipart/form-data"
的表单,其中隐藏的方法输入设置为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) { ... });
如果我改成在路由器上张贴,一切都正常。还可以将未发送给它们的
enctype="multipart/form-data"
中的工作放入和删除到其他路由中。我试着改变中间件的顺序,但没有成功。
任何帮助都将是非常感谢,因为谷歌这个问题导致什么都没有!
提前谢谢!
最佳答案
要使methodOverride()
能够使用_method
的值,它需要req.body
已经由3个体分析器中的1个定义--json()
、urlencoded()
和multipart()
。
app.use(express.multipart());
app.use(express.methodOverride());
如果要将
multipart()
与methodOverride()
一起用于所选路由,则可以将app.all()
route与中间件一起使用,并调用next('route')
以使其继续到预期路由。app.all('/update',
express.multipart(),
express.methodOverride(),
function (req, res, next) { next('route'); }
);
app.put('/update', function (req, res) {
// ...
});