8

Ошибка: запрос слишком велик

5

Я получаю следующую ошибку при использовании 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 ответ(ов)

1

В моем случае было недостаточно добавить следующие строки:

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, вы сможете избежать ошибок, связанных с превышением лимита числа параметров.

0

Если вы уже пробовали все предложенные решения и не получили успешного результата, а используете NGINX для хостинга вашего сайта, попробуйте добавить следующую строку в файл /etc/nginx/sites-available:

client_max_body_size 100M; # 100 МБ

После внесения изменений не забудьте перезапустить NGINX, чтобы они вступили в силу:

sudo systemctl restart nginx

Это увеличит максимальный размер допустимого тела запроса до 100 МБ, что может помочь, если вы сталкиваетесь с проблемами загрузки файлов большого размера.

0

В версии Express ~4.16.0 и выше вы можете использовать express.json() с параметром limit для установки предела размера тела запроса. Это можно сделать следующим образом:

app.use(express.json({ limit: '50mb' }));

Этот код устанавливает максимальный размер JSON-тела запроса в 50 мегабайт. Если размер тела превышает указанный лимит, Express вернёт ошибку 413 (Payload Too Large). Убедитесь, что вы используете соответствующую версию Express, чтобы эта функциональность работала корректно.

0

В вашем случае установка parameterLimit: 50000 решила проблему. Вот пример кода:

app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({
  limit: '50mb',
  extended: true,
  parameterLimit: 50000
}));

Параметр parameterLimit позволяет увеличить максимальное количество параметров, которые можно обработать, что может помочь, если вы получаете ошибку из-за превышения этого лимита.

0

Следующее решение сработало для меня... Просто используйте

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 года'.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь