2

我注意到,如果我提交一个带有enctype="multipart/form-data"隐藏 _method 输入的表单, PUTmethodOverride 函数将不会触发,从而导致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"发送给他们的路线中放置和删除工作。

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

任何帮助将不胜感激,因为谷歌搜索这个问题没有任何结果!

提前致谢!

4

1 回答 1

4

为了methodOverride()能够使用 的值_method,它需要req.body已经由 3 个正文解析器中的 1 个定义- json()urlencoded()multipart()

app.use(express.multipart());
app.use(express.methodOverride());

如果您想使用multipart()withmethodOverride()选择路由,您可以将app.all()路由与中间件和调用一起使用,next('route')以便它继续到预期的路由。

app.all('/update',
    express.multipart(),
    express.methodOverride(),
    function (req, res, next) { next('route'); }
);

app.put('/update', function (req, res) {
    // ...
});
于 2013-10-13T12:38:26.107 回答