Ошибка: запрос слишком велик
Я получаю следующую ошибку при использовании express:
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)
...
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)
...
POST /api/0.1/people 500 618ms
Я использую meanstack. У меня есть следующий код в express.js:
// Установить лимит размера запроса
app.use(express.limit(100000000));
В Fiddler я вижу заголовок content-length со значением 1078702, что, как я полагаю, составляет 1.0787 мегабайта.
Я не понимаю, почему express не позволяет мне отправить JSON-массив, который я ранее успешно отправлял в другом проекте на express, не используя структуру проекта mean stack.
5 ответ(ов)
В моем случае было недостаточно добавить следующие строки:
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
Я попробовал добавить параметр parameterLimit
в функцию urlencoded
, как указано в документации, и ошибка больше не появилась.
Параметр
parameterLimit
контролирует максимальное количество параметров, которые разрешены в URL-кодированных данных. Если запрос содержит больше параметров, чем это значение, клиенту будет возвращен ответ с ошибкой 413. По умолчанию это значение равно 1000.
Попробуйте использовать следующий код:
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit: 50000}));
Таким образом, увеличив значение parameterLimit
, вы сможете избежать ошибок, связанных с превышением лимита числа параметров.
Если вы уже пробовали все предложенные решения и не получили успешного результата, а используете NGINX для хостинга вашего сайта, попробуйте добавить следующую строку в файл /etc/nginx/sites-available
:
client_max_body_size 100M; # 100 МБ
После внесения изменений не забудьте перезапустить NGINX, чтобы они вступили в силу:
sudo systemctl restart nginx
Это увеличит максимальный размер допустимого тела запроса до 100 МБ, что может помочь, если вы сталкиваетесь с проблемами загрузки файлов большого размера.
В версии Express ~4.16.0 и выше вы можете использовать express.json()
с параметром limit
для установки предела размера тела запроса. Это можно сделать следующим образом:
app.use(express.json({ limit: '50mb' }));
Этот код устанавливает максимальный размер JSON-тела запроса в 50 мегабайт. Если размер тела превышает указанный лимит, Express вернёт ошибку 413 (Payload Too Large). Убедитесь, что вы используете соответствующую версию Express, чтобы эта функциональность работала корректно.
В вашем случае установка parameterLimit: 50000
решила проблему. Вот пример кода:
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit: 50000
}));
Параметр parameterLimit
позволяет увеличить максимальное количество параметров, которые можно обработать, что может помочь, если вы получаете ошибку из-за превышения этого лимита.
Следующее решение сработало для меня... Просто используйте
app.use(bodyParser({limit: '50mb'}));
Вот и всё.
Пробовал всё вышеперечисленное, и ничего не сработало. Обнаружил, что даже когда мы используем следующий код:
app.use(bodyParser());
app.use(bodyParser({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb'}));
только первая строка app.use(bodyParser());
определена, а две последующие игнорируются.
Ссылка: https://github.com/expressjs/body-parser/issues/176 >> смотрите комментарий 'dougwilson от 17 июня 2016 года'.
Запись в файлы в Node.js
Ошибка "Кросс-доменные запросы поддерживаются только для HTTP" при загрузке локального файла
Как получить параметры GET после "?" в Express?
Самый быстрый способ скопировать файл в Node.js
Обнаружена ошибка: Невозможное нарушение: Неверный тип элемента: ожидался строковый тип (для встроенных компонентов) или класс/функция, но получен объект