Я получаю следующую ошибку с экспресс:
Error: request entity too large
at module.exports (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/node_modules/raw-body/index.js:16:15)
at json (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/json.js:60:5)
at Object.bodyParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:53:5)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.cookieParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.logger (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/logger.js:158:5)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
at Object.staticMiddleware [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/static.js:55:61)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
TypeError: /Users/michaeljames/Documents/Projects/Proj/mean/app/views/includes/foot.jade:31
29| script(type="text/javascript", src="/js/socketio/connect.js")
30|
> 31| if (req.host='localhost')
32| //Livereload script rendered
33| script(type='text/javascript', src='http://localhost:35729/livereload.js')
34|
Cannot set property 'host' of undefined
at eval (eval at <anonymous> (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:152:8), <anonymous>:273:15)
at /Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:153:35
at Object.exports.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:197:10)
at Object.exports.renderFile (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:233:18)
at View.exports.renderFile [as engine] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:218:21)
at View.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/view.js:76:8)
at Function.app.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/application.js:504:10)
at ServerResponse.res.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/response.js:801:7)
at Object.handle (/Users/michaeljames/Documents/Projects/Proj/mean/config/express.js:82:29)
at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:188:17)
POST /api/0.1/people 500 618ms
Я использую стэк. У меня есть следующие заявления об использовании в моем express.js
//Set Request Size Limit
app.use(express.limit(100000000));
В fiddler я вижу заголовок content-length со значением: 1078702
Я считаю, что это в октетах, это 1,0787 мегабайт.
Я понятия не имею, почему Express не позволяет мне публиковать массив json, который я публиковал ранее, в другом проекте Express, который не использовал структуру проекта среднего стека.
javascript
node.js
http
express
Майк Джеймс
источник
источник
Ответы:
Недавно у меня была та же ошибка, и все решения, которые я нашел, не работали.
После некоторых копаний я обнаружил, что настройка
app.use(express.bodyParser({limit: '50mb'}));
правильно установила лимит.При добавлении
console.log('Limit file size: '+limit);
вnode_modules/express/node_modules/connect/lib/middleware/json.js:46
и перезагрузке узла, я получаю этот вывод в консоли:Мы видим, что сначала при загрузке
connect
модуля ограничение устанавливается в 1 МБ (1048576 байт). Затем, когда я устанавливаю ограничение,console.log
снова вызывается, и на этот раз ограничение составляет 52428800 (50 МБ). Тем не менее, я все еще получаю413 Request entity too large
.Затем я добавил
console.log('Limit file size: '+limit);
вnode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
и увидел еще одну строки в консоли , когда вызывающий маршрут с большой просьбой (перед выходом ошибки):Это означает, что каким-то образом где-то
connect
сбрасывает параметр limit и игнорирует то, что мы указали. Я попытался указатьbodyParser
параметры в определении маршрута по отдельности, но тоже не повезло.Хотя я не нашел подходящего способа установить его на постоянной основе, вы можете « исправить » его непосредственно в модуле. Если вы используете Express 3.4.4, добавьте это в строку 46
node_modules/express/node_modules/connect/lib/middleware/json.js
:Номер строки может отличаться, если вы не используете ту же версию Express. Обратите внимание, что это плохая практика, и она будет перезаписана, если вы обновите свой модуль.
Таким образом, это временное решение пока работает, но как только решение найдено (или модуль исправлен, в случае, если это проблема модуля), вы должны соответствующим образом обновить свой код.
Я открыл вопрос на их GitHub об этой проблеме.
[редактировать - нашел решение]
После некоторых исследований и испытаний я обнаружил, что при отладке я добавил
app.use(express.bodyParser({limit: '50mb'}));
, но послеapp.use(express.json());
. Express тогда установил бы глобальный лимит в 1mb, потому что первый анализатор, с которым он столкнулся при запуске скрипта, былexpress.json()
. ПеремещениеbodyParser
над ним сделало свое дело.Тем не менее,
bodyParser()
метод не рекомендуется использовать в Connect 3.0 и не должен использоваться. Вместо этого вы должны объявить ваши парсеры явно, например так:В случае, если вам нужна multipart (для загрузки файлов), смотрите этот пост .
[второе редактирование]
Обратите внимание, что в Express 4 вместо
express.json()
andexpress.urlencoded()
вам потребуется модуль body-parser и использовать егоjson()
иurlencoded()
методы, например, так:Если
extended
опция не определена явноbodyParser.urlencoded()
, она выдаст предупреждение (body-parser deprecated undefined extended: provide extended option
). Это связано с тем, что эта опция потребуется в следующей версии и больше не будет обязательной. Для получения дополнительной информации поextended
выбору, вы можете обратиться к риому изbody-parser
.[третье редактирование]
Кажется, что в Express v4.16.0 мы можем вернуться к первоначальному способу сделать это (спасибо @GBMan за подсказку):
источник
app.use(express.json({limit:'50mb'}));
. Я отредактировал свой ответ, чтобы отразить это!urlencoded
вызов синтаксического анализатора тела не определен расширенный: предоставить расширенную опцию» в вызове413::Request Entity is too large
исключение. Он не будет пересылать запрос в ваше экспресс-приложение. Поэтому нам нужно установитьclient_max_body_size 50M;
в конфигурации nginx ИЛИ конкретную конфигурацию сервера ИЛИ даже определенный тег местоположения будет работать.Я использую Express 4.
В моем случае было недостаточно добавить следующие строки:
Я попытался добавить параметр parameterLimit в функцию urlencoded, как сказано в документации, и ошибка больше не появляется.
Попробуйте с этим кодом:
источник
Если кто-то попробовал все ответы, но пока не добился успеха и использует NGINX для размещения сайта, добавьте эту строку в / etc / nginx / sites-available
источник
body-parser
будет возвращать вlimit
собственность иlength
имущество в объекте ошибки (вместе сstatus:413
). Nginx не делает этого. Так что, если вы не видите эти свойства в объекте ошибки, это, вероятно, предел nginx. Вот как изменить этот параметр nginx (файлы конфигурации, скорее всего, в/etc/nginx/sites-available/
)Я не думаю, что это явный глобальный лимит размера, а именно ограничение промежуточного программного обеспечения connect.json . Это 100 КБ по умолчанию, когда вы используете
express.bodyParser()
и не предоставляетеlimit
опцию.Пытаться:
источник
в моем случае .. установка
parameterLimit:50000
исправила проблемуисточник
body-parser
полезной нагрузки по умолчанию ). Была решена только с (не нужно устанавливать какие-либо с).parameterLimit
limit
2016, ничего из вышеперечисленного не работало для меня, пока я не установил «тип» в дополнение к «пределу» для bodyparser, например:
источник
application/x-www-form-urlencoded
(а неapplication/x-www-form-urlencoding
)?Следующее сработало для меня ... Просто используйте
это оно.
Перепробовал все выше и никто не работал. Обнаружил, что, хотя мы используем как следующее,
только 1-й
app.use(bodyParser());
определяется, а последние две строки были проигнорированы.См. Https://github.com/expressjs/body-parser/issues/176 >> см. «Комментарий Даугвилсона 17 июня 2016 г.»
источник
Для express ~ 4.16.0, express.json с лимитом работает напрямую
источник
В моем случае проблема была в конфигурации Nginx . Чтобы решить эту проблему, я должен отредактировать файл:
/etc/nginx/nginx.conf
и добавить эту строку внутри блока сервера:Перезапустите Nginx и проблемы исчезли
источник
Я использовал другую практику для этой проблемы с взаимной зависимостью.
Пример:
источник
Маленький старый пост, но у меня была такая же проблема
Используя Express 4. + мой код выглядит так, и он отлично работает после двух дней всестороннего тестирования.
источник
Немного другой подход - полезная нагрузка слишком БОЛЬШАЯ
Пока что все полезные ответы касаются увеличения предела полезной нагрузки. Но может также случиться так, что полезная нагрузка действительно слишком велика, но без веской причины. Если нет веской причины для этого, подумайте, почему это так раздуто.
Наш собственный опыт
Например, в нашем случае приложение Angular жадно отправляло весь объект в полезную нагрузку. Когда одно раздутое и избыточное свойство было удалено, размер полезной нагрузки уменьшился в 100 раз . Это значительно улучшило производительность и позволило устранить ошибку 413.
источник
После многих попыток я получил свое решение
Я прокомментировал эту строку
и я положил
Тогда работает
источник
для меня следующий фрагмент решил проблему.
источник
Лучше использовать вы можете указать ограничение размера вашего файла, как показано в следующих строках:
Вы также можете изменить настройки по умолчанию в node-modules body-parser, затем в папке lib есть JSON и текстовый файл. Тогда измените лимит здесь. На самом деле это условие выполняется, если вы не передаете параметр limit в заданной строке app.use (bodyParser.json ({limit: '10mb', extended: true})).
источник
Я тоже столкнулся с этой проблемой, я сделал глупую ошибку, повторив
app.use(bodyParser.json())
следующее:удалив
app.use(bodyParser.json())
, решил проблему.источник
В моем случае удаление
Content-type
из запроса заголовков сработало.источник
Для меня главный трюк
bodyParse.json first bodyParse.urlencoded второй
источник
Если вы используете
express.json()
и bodyParser вместе, это выдаст ошибку, так как экспресс устанавливает свой собственный предел.удалить код выше и просто добавить код ниже
источник