2013-10-13 3 views
2

Я заметил, что если я отправлю форму с enctype="multipart/form-data", которая имеет скрытый входной сигнал _method, установленный в PUT, функция methodOverride не будет срабатывать, в результате чего для этого маршрута будет 404 POST ,Nodejs Express - methodOverride не работает для multipart/form-data

установочном:

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

Для methodOverride(), чтобы иметь возможность использовать значение _method, она должна req.body к уже были определены 1 из 3 анализаторов тела - 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) { 
    // ... 
}); 
+0

@Skatebail Это должно быть хорошо, чтобы использовать его несколько раз. Если '_method' доступен для обоих, они должны просто установить одно и то же значение в' req.method'. Если каким-то образом вашему приложению удается установить 2 значения для '_method'. –

+0

Спасибо большое, и за вашу помощь, и за время, это работает! – michaeltintiuc