I'm receiving the following error with 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
I am using meanstack. I have the following use statements in my express.js
//Set Request Size Limit
app.use(express.limit(100000000));
Within fiddler I can see the content-length header with a value of: 1078702
I believe this is in octets, this is 1.0787 megabytes.
I have no idea why express is not letting me post the json array I was posting previously in another express project that was not using the mean stack project structure.
The better use you can specify the limit of your file size as it is shown in the given lines:
You can also change the default setting in node-modules body-parser then in the lib folder, there are JSON and text file. Then change limit here. Actually, this condition pass if you don't pass the limit parameter in the given line app.use(bodyParser.json({limit: '10mb', extended: true})).
For me the main trick is
bodyParse.json first bodyParse.urlencoded second
I had the same error recently, and all the solutions I've found did not work.
After some digging, I found that setting
app.use(express.bodyParser({limit: '50mb'}));
did set the limit correctly.When adding a
console.log('Limit file size: '+limit);
innode_modules/express/node_modules/connect/lib/middleware/json.js:46
and restarting node, I get this output in the console:We can see that at first, when loading the
connect
module, the limit is set to 1mb (1048576 bytes). Then when I set the limit, theconsole.log
is called again and this time the limit is 52428800 (50mb). However, I still get a413 Request entity too large
.Then I added
console.log('Limit file size: '+limit);
innode_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
and saw another line in the console when calling the route with a big request (before the error output) :This means that somehow, somewhere,
connect
resets the limit parameter and ignores what we specified. I tried specifying thebodyParser
parameters in the route definition individually, but no luck either.While I did not find any proper way to set it permanently, you can "patch" it in the module directly. If you are using Express 3.4.4, add this at line 46 of
node_modules/express/node_modules/connect/lib/middleware/json.js
:The line number might differ if you don't run the same version of Express. Please note that this is bad practice and it will be overwritten if you update your module.
So this temporary solution works for now, but as soon as a solution is found (or the module fixed, in case it's a module problem) you should update your code accordingly.
I have opened an issue on their GitHub about this problem.
[edit - found the solution]
After some research and testing, I found that when debugging, I added
app.use(express.bodyParser({limit: '50mb'}));
, but afterapp.use(express.json());
. Express would then set the global limit to 1mb because the first parser he encountered when running the script wasexpress.json()
. MovingbodyParser
above it did the trick.That said, the
bodyParser()
method will be deprecated in Connect 3.0 and should not be used. Instead, you should declare your parsers explicitly, like so :In case you need multipart (for file uploads) see this post.
Second edit
Note that in Express 4, instead of
express.json()
andexpress.urlencoded()
, you must require the body-parser module and use itsjson()
andurlencoded()
methods, like so :If the
extended
option is not explicitly defined forbodyParser.urlencoded()
, it will throw a warning (body-parser deprecated undefined extended: provide extended option
). This is because this option will be required in the next version and will not be optional anymore. For more info on theextended
option, please refer to the readme ofbody-parser
.In my case the problem was on Nginx configuration. To solve it I have to edit the file:
/etc/nginx/nginx.conf
and add this line inside server block:Restart Nginx and the problems its gone
After דo many tries I got my solution
I have commented this line
and I put
Then it works
for me following snippet solved the problem.