Nodejs Express - methodOverride не работает для multipart/form-data

Я заметил, что если я отправлю форму с 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) { ... });

если я изменяю поставить на пост в роутере все работает просто отлично. Также ставьте и удаляйте работы в других маршрутах, которые не имеют enctype="multipart/form-data" отправил им.

Я попытался изменить порядок промежуточного программного обеспечения, но безуспешно.

Любая помощь будет высоко оценена, так как поиск этой проблемы ни к чему не приведет!

Заранее спасибо!

1 ответ

Решение

За methodOverride() чтобы иметь возможность использовать значение _method, это нужно req.body чтобы уже были определены 1 из 3 парсеров тела - json(), urlencoded(), а также multipart(),

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

Если вы хотите использовать multipart() с methodOverride() для выбора маршрутов вы можете использовать app.all() маршрут с промежуточным ПО и вызовом next('route') так что он продолжает намеченный маршрут.

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

app.put('/update', function (req, res) {
    // ...
});
Другие вопросы по тегам