2014-05-15 11 views
5

Mam prosty formularz:multipart/form-data z tablicami

<form method="post" action="/test"> 
    <input type="hidden" name="arr[]" value="val1"> 
    <input type="hidden" name="arr[]" value="val2"> 
    <input type="hidden" name="arr[]" value="val3"> 
    <input type="submit" value="Submit"> 
</form> 

Z Kontroler:

//... 
server.post('/test', function(req, res) { 
    res.json(req.body); 
}); 
//... 

ta zwraca w porządku:

{ 
    arr: [ 
    "val1", 
    "val2", 
    "val3" 
    ] 
} 

Jednak, kiedy zmień typ encji na wieloczęściowy/formularz danych

<form method="post" action="/test" enctype="multipart/form-data"> 
    <input type="hidden" name="arr[]" value="val1"> 
    <input type="hidden" name="arr[]" value="val2"> 
    <input type="hidden" name="arr[]" value="val3"> 
    <input type="submit" value="Submit"> 
</form> 

Serwer odpowiada teraz z:

{ 
    arr[]: "val3" 
} 

Na czym polega problem? Czy potrzebuję jakiejś konfiguracji?

Jeśli masz wątpliwości, wysyłam plik, dlatego potrzebuję multipart/form-data.

+1

wygląda bardziej jak multiparty nie obsługuje tej sytuacji poprawnie. Byłby zainteresowany, aby zobaczyć, co wychodzi. Jeśli nie znajdziesz rozwiązania, spróbuj zgłosić to pod adresem: https://github.com/andrewrk/node-multiparty/issues –

+0

Czy dowiedziałeś się, co było nie tak? Mam ten sam problem tutaj –

+0

Składnia tablicowa jest niestandardowym rozszerzeniem do składni form. Twój organizm analizuje dane zakodowane w url, rozpoznaje je, ale analizator treści dla danych wieloczęściowych nie. Nie dostarczyłeś [mcve], więc nie wiemy, jakich parserów ciała używasz, więc nie możemy stwierdzić, czy tak jest, ponieważ nie ma wsparcia lub jeśli wsparcie musi być włączone. – Quentin

Odpowiedz

0

To prawdopodobnie związane ze stosowaniem body-parser (zwłaszcza metody urlencoded), które by default prace nad wnioskami z mediami typu application/x-www-form-urlencoded tylko.

Twój główny moduł aplikacji prawdopodobnie ma pewne linie, takie jak:

const bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded()); 

Przypuszczam, można po prostu dodać następujące mieć żądań typu multipart/form-data analizowany także:

app.use(bodyParser.urlencoded({ 
    type: 'multipart/form-data' 
})); 
+0

Składnia wieloczęściowa jest zupełnie inna niż składnia ze słowami kluczowymi. Nie można używać parsera dla jednego z drugim. – Quentin

+0

Whoops, my bad! Ale analizator treści nie ma składni wieloczęściowej, potrzebny jest dedykowany moduł do obsługi żądań wieloczęściowych, takich jak busboy lub multer, jak wspomniano w dokumentacji parsera ciała. –

+0

Oni już używają jednego (w przeciwnym razie nie otrzymaliby rezultatów, o których mówili, że dostali), ale nie wiemy, który. – Quentin

Powiązane problemy