Estou recebendo o seguinte erro com 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)
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
Estou usando o meanstack. Eu tenho as seguintes instruções de uso no meu express.js
//Set Request Size Limit
app.use(express.limit(100000000));
No violinista, posso ver o cabeçalho de comprimento de conteúdo com um valor de: 1078702
Eu acredito que isso é em octetos, isso é 1.0787 megabytes.
Não sei por que o express não está me permitindo postar a matriz json que eu estava postando anteriormente em outro projeto expresso que não estava usando a estrutura do projeto de pilha média.
javascript
node.js
http
express
Mike James
fonte
fonte
Respostas:
Eu tive o mesmo erro recentemente e todas as soluções que encontrei não funcionaram.
Após algumas escavações, descobri que a configuração
app.use(express.bodyParser({limit: '50mb'}));
definiu o limite corretamente.Ao adicionar um
console.log('Limit file size: '+limit);
emnode_modules/express/node_modules/connect/lib/middleware/json.js:46
e reiniciar nó, eu recebo esta saída no console:Podemos ver que, a princípio, ao carregar o
connect
módulo, o limite é definido como 1mb (1048576 bytes). Então, quando eu defino o limite, eleconsole.log
é chamado novamente e, desta vez, o limite é 52428800 (50mb). No entanto, eu ainda recebo um413 Request entity too large
.Então eu adicionei
console.log('Limit file size: '+limit);
emnode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
e viu outra linha no console ao chamar a rota com um grande pedido (antes da saída de erro):Isso significa que, de alguma forma, em algum lugar,
connect
redefine o parâmetro limit e ignora o que especificamos. Tentei especificar osbodyParser
parâmetros na definição de rota individualmente, mas também não tive sorte.Embora eu não tenha encontrado nenhuma maneira adequada de configurá-lo permanentemente, você pode " corrigi- lo" diretamente no módulo. Se você estiver usando o Express 3.4.4, adicione-o na linha 46 de
node_modules/express/node_modules/connect/lib/middleware/json.js
:O número da linha pode ser diferente se você não executar a mesma versão do Express. Observe que isso é uma prática ruim e será sobrescrita se você atualizar seu módulo.
Portanto, essa solução temporária funciona por enquanto, mas assim que uma solução for encontrada (ou o módulo for corrigido, caso seja um problema do módulo), você deverá atualizar seu código de acordo.
Eu abri um problema no GitHub sobre esse problema.
[edit - encontrou a solução]
Após algumas pesquisas e testes, descobri que, durante a depuração, eu adicionei
app.use(express.bodyParser({limit: '50mb'}));
, mas depoisapp.use(express.json());
. O Express configuraria o limite global para 1mb porque o primeiro analisador encontrado ao executar o script foiexpress.json()
. MoverbodyParser
acima fez o truque.Dito isso, o
bodyParser()
método será preterido no Connect 3.0 e não deve ser usado. Em vez disso, você deve declarar seus analisadores explicitamente, assim:Caso você precise de várias partes (para upload de arquivos), consulte esta publicação .
[segunda edição]
Observe que no Express 4, em vez de
express.json()
eexpress.urlencoded()
, você deve exigir o módulo body-parser e usar seus métodosjson()
eurlencoded()
, da seguinte maneira:Se a
extended
opção não estiver explicitamente definidabodyParser.urlencoded()
, será emitido um aviso (body-parser deprecated undefined extended: provide extended option
). Isso ocorre porque essa opção será necessária na próxima versão e não será mais opcional. Para mais informações sobre aextended
opção, você pode consultar o leia - me debody-parser
.[terceira edição]
Parece que no Express v4.16.0 em diante, podemos voltar à maneira inicial de fazer isso (obrigado a @GBMan pela dica):
fonte
app.use(express.json({limit:'50mb'}));
. Eu editei minha resposta para refletir isso!urlencoded
chamada413::Request Entity is too large
exceção. Ele não encaminhará a solicitação para o seu aplicativo expresso. Portanto, precisamos definirclient_max_body_size 50M;
na configuração do nginx OU uma configuração específica do servidor OU mesmo uma tag de localização específica funcionará.Eu uso o Express 4.
No meu caso, não foi suficiente adicionar estas linhas:
Tentei adicionar a opção parameterLimit na função urlencoded, conforme a documentação diz e o erro não aparece mais.
Tente com este código:
fonte
Se alguém tentou todas as respostas, mas ainda não obteve sucesso e usa o NGINX para hospedar o site, adicione esta linha a / etc / nginx / sites-available
fonte
body-parser
retornará umalimit
propriedade e umalength
propriedade no objeto de erro (junto comstatus:413
). O Nginx não faz isso. Portanto, se você não pode ver essas propriedades no objeto de erro, provavelmente é um limite de nginx. Aqui está como alterar essa configuração nginx (arquivos de configuração mais provável em/etc/nginx/sites-available/
)Eu não acho que esse seja o limite de tamanho global expresso, mas especificamente o limite do middleware connect.json . Isso é 100kb por padrão quando você usa
express.bodyParser()
e não fornece umalimit
opção.Tentar:
fonte
no meu caso .. configuração
parameterLimit:50000
corrigiu o problemafonte
body-parser
carga útil padrão é bom para mim). Foi resolvido apenas (não é necessário definir nenhum ).parameterLimit
limit
2016, nenhuma das opções acima funcionou para mim até que eu explicitamente defina o 'tipo' além do 'limite' para bodyparser, por exemplo:
fonte
application/x-www-form-urlencoded
(ao invés deapplication/x-www-form-urlencoding
)?O seguinte funcionou para mim ... Basta usar
é isso aí.
Tentei tudo acima e nenhum funcionou. Verificou que, embora usemos o seguinte,
somente o primeiro
app.use(bodyParser());
é definido e as duas últimas linhas são ignoradas.Consulte: https://github.com/expressjs/body-parser/issues/176 >> veja 'dougwilson comentou em 17 de junho de 2016'
fonte
Para express ~ 4.16.0, express.json com limite trabalha diretamente
fonte
No meu caso, o problema estava na configuração do Nginx . Para resolvê-lo, tenho que editar o arquivo:
/etc/nginx/nginx.conf
e adicionar esta linha dentro do bloco do servidor:Reinicie o Nginx e os problemas desapareceram
fonte
Eu usei outra prática para esse problema com dependência multer.
Exemplo:
fonte
Post antigo, mas tive o mesmo problema
Usando express 4. +, meu código se parece com isso e funciona muito bem após dois dias de testes extensivos.
fonte
Uma abordagem um pouco diferente - a carga útil é muito GRANDE
Até agora, todas as respostas úteis lidam com o aumento do limite de carga útil. Mas também pode ser que a carga útil seja realmente muito grande, mas sem uma boa razão. Se não houver um motivo válido para isso, considere analisar por que está tão inchado em primeiro lugar.
Nossa própria experiência
Por exemplo, no nosso caso, um aplicativo Angular estava enviando avidamente um objeto inteiro na carga útil. Quando uma propriedade inchada e redundante foi removida, o tamanho da carga útil foi reduzido em um fator de 100 . Isso melhorou significativamente o desempenho e resolveu o erro 413.
fonte
Depois de muitas tentativas, consegui minha solução
Eu comentei esta linha
e eu coloquei
Então funciona
fonte
para mim, o seguinte trecho resolveu o problema.
fonte
O melhor uso que você pode especificar é o limite do tamanho do arquivo, conforme mostrado nas linhas fornecidas:
Você também pode alterar a configuração padrão no node-modules body-parser e, na pasta lib, há JSON e arquivo de texto. Então mude o limite aqui. Na verdade, essa condição será aprovada se você não passar o parâmetro limit na linha app.use (bodyParser.json ({limit: '10mb', extended: true})).
fonte
Eu também enfrentei esse problema, estava cometendo um erro bobo repetindo o
app.use(bodyParser.json())
seguinte abaixo:removendo
app.use(bodyParser.json())
, resolveu o problema.fonte
No meu caso, remover
Content-type
os cabeçalhos da solicitação funcionou.fonte
Para mim, o principal truque é
bodyParse.json primeiro bodyParse.urlencoded segundo
fonte
Se você estiver usando
express.json()
e bodyParser juntos vai dar erro como expresso define seu próprio limite.remova o código acima e apenas adicione o código abaixo
fonte