Nodejs Express - methodOverride不适用于multipart / form-data

时间:2013-10-13 10:31:20

标签: javascript forms node.js express x-http-method-override

我注意到,如果我提交的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"的其他路由中放置和删除工作。

我尝试改变中间件的顺序,但没有运气。

任何帮助都会受到高度赞赏,因为谷歌搜索这个问题什么都没有!

提前致谢!

1 个答案:

答案 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) {
    // ...
});