2016-04-19 2 views
7

У меня есть задача загрузить данные пользователя навалом через файл csv. Я использую nodejs и express рамки. Когда я отправляю файл csv с 60 по 70 строк, он работает нормально, но когда он превышает 70 строк, он начинает давать серверной ошибке слишком много параметров. После некоторого исследования я пришел к выводу, что это может быть проблема размера парсера тела, поэтому я попробовал This blog, но это не сработало, ошибка все равно такая же.Ошибка Node.js: слишком много параметров Ошибка при загрузке массовых данных

вот мой код для синтаксического анализа тела:

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 })); 

Сообщение об ошибке:

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) 

Так, может кто-нибудь сказать мне, где я буду неправильно. Любое предложение было бы полезно. Thanx заранее.

+0

вы нашли решение? –

ответ

5

В вашем коде это вы не используете parameterLimit вообще, как указано в блоге, размещенном на вашем сайте.

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

@ Francesco на самом деле я пробовал этот код раньше, но он не работал, поэтому я вернул его в оригинал. Не работает код. –

+0

Вы пытались установить как 'limit', так и' parameterLimit' для вашего промежуточного программного обеспечения 'bodyParser.urlencoded'? Согласно [документам body-parser docs] (https://github.com/expressjs/body-parser#bodyparserurlencodedoptions) доступно только 5 настроек: 'inflate',' limit', 'parameterLimit',' type', 'verify' –

+0

не работает для меня ни –

4

Я не знаю, где вы, ребята, тестирование API, но для меня это было потому, что я поставил заголовок Content-Type к application/x-www-form-urlencoded в Почтальон. Как только я удалил заголовок и использовал form-data под корпусом, он решил проблему. Обязательно всегда используйте form-data при загрузке файлов. Надеюсь, это поможет ...

+0

Отлично! Я тоже пропустил то же самое. Это сработало –

+0

Вы спасли много своего времени сегодня, спасибо вам! – Thecave3

7

Как уже упоминалось, вам нужно установить parameterLimit для устранения ошибки «слишком много параметров». Вам также может потребоваться установить limit в большем размере, чтобы избежать ошибки размера загрузки. В случае CSV применяются ограничения urlencoded, но другие могут также захотеть установить пределы JSON. Следующая настройка будет работать, если в коде нет других мест, которые переопределяют эти параметры:

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