Recibo el siguiente error con 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
Estoy usando meanstack. Tengo las siguientes declaraciones de uso en mi express.js
//Set Request Size Limit
app.use(express.limit(100000000));
Dentro de Fiddler puedo ver el encabezado de longitud de contenido con un valor de: 1078702
Creo que esto está en octetos, esto es 1.0787 megabytes.
No tengo idea de por qué express no me permite publicar la matriz json que estaba publicando anteriormente en otro proyecto express que no estaba utilizando la estructura del proyecto stack medio.
javascript
node.js
http
express
Mike James
fuente
fuente
Respuestas:
Recientemente tuve el mismo error y todas las soluciones que encontré no funcionaron.
Después de cavar un poco, descubrí que la configuración
app.use(express.bodyParser({limit: '50mb'}));
estableció el límite correctamente.Al agregar una
console.log('Limit file size: '+limit);
ennode_modules/express/node_modules/connect/lib/middleware/json.js:46
y reiniciar el nodo, consigo esta salida en la consola:Podemos ver que al principio, al cargar el
connect
módulo, el límite se establece en 1 mb (1048576 bytes). Luego, cuando establezco el límite,console.log
se vuelve a llamar y esta vez el límite es 52428800 (50mb). Sin embargo, sigo teniendo un413 Request entity too large
.Luego añade
console.log('Limit file size: '+limit);
ennode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
y vi otra línea en la consola cuando se llama a la ruta con un gran pedido (antes de la salida de error):Esto significa que de alguna manera, en algún lugar,
connect
restablece el parámetro límite e ignora lo que especificamos. Intenté especificar losbodyParser
parámetros en la definición de ruta individualmente, pero tampoco tuve suerte.Si bien no encontré ninguna forma adecuada de configurarlo permanentemente, puede " parcharlo " directamente en el módulo. Si está utilizando Express 3.4.4, agregue esto en la línea 46 de
node_modules/express/node_modules/connect/lib/middleware/json.js
:El número de línea puede diferir si no ejecuta la misma versión de Express. Tenga en cuenta que esta es una mala práctica y se sobrescribirá si actualiza su módulo.
Por lo tanto, esta solución temporal funciona por ahora, pero tan pronto como se encuentre una solución (o se arregle el módulo, en caso de que sea un problema del módulo), debe actualizar su código en consecuencia.
He abierto un problema en su GitHub sobre este problema.
[editar - encontró la solución]
Después de algunas investigaciones y pruebas, descubrí que al depurar, agregué
app.use(express.bodyParser({limit: '50mb'}));
, pero despuésapp.use(express.json());
. Express establecería el límite global en 1mb porque el primer analizador que encontró al ejecutar el script fueexpress.json()
. Mover porbodyParser
encima hizo el truco.Dicho esto, el
bodyParser()
método quedará en desuso en Connect 3.0 y no debe usarse. En su lugar, debe declarar sus analizadores explícitamente, así:En caso de que necesite multiparte (para cargar archivos) vea esta publicación .
[segunda edición]
Tenga en cuenta que en Express 4, en lugar de
express.json()
yexpress.urlencoded()
, debe requerir el módulo body-parser y usar sus métodosjson()
yurlencoded()
, de esta manera:Si la
extended
opción no se define explícitamente parabodyParser.urlencoded()
, arrojará una advertencia (body-parser deprecated undefined extended: provide extended option
). Esto se debe a que esta opción será necesaria en la próxima versión y ya no será opcional. Para obtener más información sobre laextended
opción, puede consultar el archivo Léame debody-parser
.[tercera edición]
Parece que en Express v4.16.0 en adelante, podemos volver a la forma inicial de hacerlo (gracias a @GBMan por el consejo):
fuente
app.use(express.json({limit:'50mb'}));
. ¡Edité mi respuesta para reflejar esto!urlencoded
llamada413::Request Entity is too large
excepción. No reenviará la solicitud a su aplicación express. Por lo tanto, necesitamos establecerclient_max_body_size 50M;
en la configuración de nginx O una configuración de servidor específica O incluso una etiqueta de ubicación específica funcionará.Yo uso Express 4.
En mi caso, no fue suficiente agregar estas líneas:
Intenté agregar la opción parameterLimit en la función urlencoded como dice la documentación y el error ya no aparece.
Prueba con este código:
fuente
Si alguien probó todas las respuestas, pero aún no ha tenido éxito y usa NGINX para alojar el sitio, agregue esta línea a / etc / nginx / sites-available
fuente
body-parser
devolverá unalimit
propiedad y unalength
propiedad en el objeto de error (junto constatus:413
). Nginx no hace esto. Entonces, si no puede ver esas propiedades en el objeto de error, probablemente sea un límite nginx. A continuación, le indicamos cómo cambiar esta configuración nginx (los archivos de configuración probablemente/etc/nginx/sites-available/
)No creo que este sea el límite de tamaño global expreso, sino específicamente el límite de middleware connect.json . Esto es 100kb por defecto cuando lo usa
express.bodyParser()
y no proporciona unalimit
opción.Tratar:
fuente
en mi caso ... la configuración
parameterLimit:50000
solucionó el problemafuente
body-parser
carga útil está bien para mí). Se resolvió solo con (no es necesario establecer ninguna ).parameterLimit
limit
2016, ninguno de los anteriores funcionó para mí hasta que explicitamente configuré el 'tipo' además del 'límite' para bodyparser, por ejemplo:
fuente
application/x-www-form-urlencoded
(en lugar deapplication/x-www-form-urlencoding
)?Lo siguiente funcionó para mí ... Solo use
Eso es.
Intenté todo lo anterior y ninguno funcionó. Descubrimos que a pesar de que usamos lo siguiente,
solo
app.use(bodyParser());
se define el primero y se ignoraron las dos últimas líneas.Consulte: https://github.com/expressjs/body-parser/issues/176 >> vea 'dougwilson comentó el 17 de junio de 2016'
fuente
Para express ~ 4.16.0, express.json con límite funciona directamente
fuente
En mi caso, el problema estaba en la configuración de Nginx . Para resolverlo, tengo que editar el archivo:
/etc/nginx/nginx.conf
y agregar esta línea dentro del bloque del servidor:Reinicie Nginx y los problemas se han ido
fuente
He usado otra práctica para este problema con la dependencia de multer.
Ejemplo:
fuente
Pequeño post viejo pero tuve el mismo problema
Usando express 4. + mi código se ve así y funciona muy bien después de dos días de extensas pruebas.
fuente
Un enfoque ligeramente diferente: la carga útil es demasiado GRANDE
Todas las respuestas útiles hasta ahora tratan de aumentar el límite de carga útil. Pero también podría darse el caso de que la carga útil sea realmente demasiado grande, pero sin una buena razón. Si no hay una razón válida para que sea así, considera investigar por qué está tan hinchado en primer lugar.
Nuestra propia experiencia
Por ejemplo, en nuestro caso, una aplicación Angular enviaba con avidez un objeto completo en la carga útil. Cuando se eliminó una propiedad hinchada y redundante, el tamaño de la carga útil se redujo en un factor de 100 . Esto mejoró significativamente el rendimiento y resolvió el error 413.
fuente
Después de muchos intentos obtuve mi solución
He comentado esta linea
y pongo
Entonces funciona
fuente
para mí el siguiente fragmento resolvió el problema.
fuente
El mejor uso puede especificar el límite del tamaño de su archivo como se muestra en las líneas dadas:
También puede cambiar la configuración predeterminada en el analizador de cuerpo de módulos de nodo y luego en la carpeta lib, hay archivos JSON y de texto. Entonces cambie el límite aquí. En realidad, esta condición pasa si no pasa el parámetro límite en la línea dada app.use (bodyParser.json ({limit: '10mb', extended: true})).
fuente
Yo también enfrenté ese problema, estaba cometiendo un error tonto al repetir lo
app.use(bodyParser.json())
siguiente a continuación:quitando
app.use(bodyParser.json())
, resolvió el problema.fuente
En mi caso, la eliminación
Content-type
de los encabezados de solicitud funcionó.fuente
Para mí el truco principal es
bodyParse.json primero bodyParse.urlencoded segundo
fuente
Si está utilizando
express.json()
y bodyParser juntos, dará error ya que express establece su propio límite.elimine el código anterior y simplemente agregue el código siguiente
fuente