2016-04-19 19 views
7

Mam zadanie, aby przesłać zbiorczo dane użytkownika poprzez plik csv. Korzystam z frameworków nodejs i express. Kiedy przesyłam plik CSV zawierający od 60 do 70 wierszy, działa on poprawnie, ale gdy przekroczy 70 wierszy, zaczyna podawać błąd serwera zbyt wielu parametrach. Po niektórych badaniach doszedłem do wniosku, że może to być problem rozmiaru parsera ciała, więc próbowałem This blog, ale nie działał błąd jest nadal taki sam.Błąd Node.js: zbyt wiele parametrów Błąd podczas przesyłania danych zbiorczych

tutaj jest mój kod parsera ciała:

var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
app.use(cookieParser()); 
app.use(bodyParser({limit: '50mb'})); 
app.use(bodyParser.json({limit: '50mb'})); 
app.use(bodyParser.urlencoded({ extended: false })); 

Komunikat o błędzie:

2016-04-19T10:29:45.299Z - error: [req#d3a1fa1a-278e-496e-9cb1-b3a944e3d1c8/app] [App] Error: too many parameters Error: too many parameters 
    at queryparse (d:\Git\gap-vm 13416\node_modules\body-parser\lib\types\urlencoded.js:119:17) 
    at parse (d:\Git\gap-vm 13416\node_modules\body-parser\lib\types\urlencoded.js:64:9) 
    at d:\Git\gap-vm 13416\node_modules\body-parser\lib\read.js:91:18 
    at IncomingMessage.onEnd (d:\Git\gap-vm 13416\node_modules\raw-body\index.js:136:7) 
    at IncomingMessage.g (events.js:273:16) 
    at emitNone (events.js:80:13) 
    at IncomingMessage.emit (events.js:179:7) 
    at endReadableNT (_stream_readable.js:906:12) 
    at nextTickCallbackWith2Args (node.js:474:9) 
    at process._tickCallback (node.js:388:17) 

Więc może ktoś mi powiedzieć gdzie jestem będzie niewłaściwy. Każda sugestia byłaby pomocna. Z góry z góry.

+0

Czy znalazłeś jakieś rozwiązanie? –

Odpowiedz

5

W swoim kodzie nie korzystasz w ogóle z parameterLimit, jak wskazano na blogu opublikowanym przez Ciebie.

var bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({ 
    extended: false, 
    parameterLimit: 1000000 // experiment with this parameter and tweak 
})); 
+0

@ Francesco faktycznie próbowałem tego kodu wcześniej, ale to nie działało, więc przywróciłem go do oryginału. Powyższy kod nie działa. –

+0

Czy próbowałeś ustawić 'limit' i 'parameterLimit' dla swojego oprogramowania pośredniego' bodyParser.urlencoded'? Według [body-parser docs] (https://github.com/expressjs/body-parser#bodyparserurlencodedoptions) dostępnych jest tylko 5 ustawień: 'inflate',' limit', 'parameterLimit',' type', 'verify' –

+0

nie działa dla mnie ani –

4

nie jestem pewien, gdzie jesteście testowania API, ale dla mnie było to, bo ustawić nagłówek Content-Type do application/x-www-form-urlencoded w Postman. Gdy usunąłem nagłówek i użyłem form-data pod sekcją body, rozwiązałem problem. Upewnij się, że podczas przesyłania plików zawsze używaj form-data. Mam nadzieję, że pomoże ...

+0

Perfect! Tęskniłem za tym samym punktem. To zadziałało –

+0

Dzisiaj zaoszczędziłeś dużo mojego czasu, dziękuję kolego! – Thecave3

7

Jak wspominają inni, musisz ustawić parameterLimit, aby poradzić sobie z błędem "zbyt wiele parametrów". Może być również konieczne ustawienie rozmiaru limit na większy rozmiar, aby uniknąć błędu rozmiaru obciążenia. W przypadku CSV zostaną zastosowane limity zakodowane, ale inne mogą również chcieć ustawić limity JSON. Poniższe ustawienie zadziała, chyba że w kodzie są inne miejsca, które przesłaniają te ustawienia:

var bodyParser = require('body-parser'); 
app.use(bodyParser.json({limit: '50mb', parameterLimit: 1000000})); 
app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000})); 
Powiązane problemy