我注意到,如果我提交一个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) {
    // ...
});

09-07 23:40