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
我正在使用meanstack。我的express.js中有以下使用语句。
//Set Request Size Limit
app.use(express.limit(100000000));
在提琴手中,我可以看到内容长度标头的值为:1078702
我相信这是以八位字节为单位的,为1.0787兆字节。
我不知道为什么express不让我发布以前在另一个未使用均值的express项目中发布的json数组。堆栈项目结构。
#1 楼
最近我遇到了同样的错误,发现的所有解决方案均不起作用。进行一些挖掘后,我发现设置
app.use(express.bodyParser({limit: '50mb'}));
确实可以正确设置限制。 在
console.log('Limit file size: '+limit);
中添加node_modules/express/node_modules/connect/lib/middleware/json.js:46
并重新启动节点时,我在控制台中得到以下输出: Limit file size: 1048576
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Limit file size: 52428800
Express server listening on port 3002
我们可以看到,首先,在加载
connect
模块时,限制被设置为1mb(1048576字节)。然后,当我设置限制时,再次调用console.log
,这次限制为52428800(50mb)。但是,我仍然得到一个413 Request entity too large
。然后我在
console.log('Limit file size: '+limit);
中添加了node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10
,并且在调用具有较大请求的路由时(在错误输出之前)在控制台中看到另一行: Limit file size: 1048576
这意味着
connect
在某种程度上会重置limit参数并忽略我们指定的内容。我尝试在路由定义中分别指定bodyParser
参数,但也没有运气。如果您使用的是Express 3.4.4,请将其添加到node_modules/express/node_modules/connect/lib/middleware/json.js
的第46行: limit = 52428800; // for 50mb, this corresponds to the size in bytes
如果您未运行相同版本的Express,则行号可能会有所不同。
请注意,这是一种不好的做法,如果您更新模块,则会被覆盖。
所以这临时解决方案目前可以使用,但是一旦找到解决方案(或者修复了模块,以防出现模块问题),就应该相应地更新代码。
我在他们的GitHub上打开了一个问题关于此问题。
[编辑-找到解决方案]
经过一些研究和测试,我发现在调试时,我添加了
app.use(express.bodyParser({limit: '50mb'}));
,但在app.use(express.json());
之后。 Express会将全局限制设置为1mb,因为他在运行脚本时遇到的第一个解析器是express.json()
。将bodyParser
移到上面可以解决问题。这就是说,在Connect 3.0中将弃用
bodyParser()
方法,因此不应使用。相反,您应该像这样显式声明解析器: app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
以防您需要分段(用于文件上传),请参阅此帖子。
[第二次编辑]
请注意,在Express 4中,您必须使用body-parser模块,而不是
express.json()
和express.urlencoded()
并使用其json()
和urlencoded()
方法,例如: var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
如果
extended
选项为没有为bodyParser.urlencoded()
明确定义,它将抛出警告(body-parser deprecated undefined extended: provide extended option
)。这是因为此选项在下一版本中将是必需的,并且不再是可选的。有关extended
选项的更多信息,请参阅body-parser
的自述文件。[第三次编辑]
在Express v4.16.0及更高版本中,似乎可以回到执行此操作的初始方式(感谢@GBMan提示):
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
评论
我的问题是我的bodyParser上方有express.json()解析器...了解了所有工作原理后,我删除了bodyParser并在另一个中设置了de limit,例如app.use(express.json({limit:'50mb' }))。我编辑了答案以反映这一点!
–塞缪尔·博尔杜克(Samuel Bolduc)
13年11月14日在2:22
对于express 4,指示的代码在urlencoded调用中引发“ body-parser不建议使用的未定义扩展:提供扩展选项”
– Mike'Pomax'Kamermans
2014年10月4日19:17
感谢您对Express 4进行更新。您可以挽救生命!
– S水
2015年11月4日6:00
这是这个答案所获得的全面信息,因此,如果您将nginx用作node.js / express实例之前的反向代理,则还有其他一点可供将来参考,这也是推荐的做法。 Nginx将抛出相同的413 :: Request Entity太大异常。它不会将请求转发到您的快速应用程序。因此我们需要将client_max_body_size设置为50M;在Nginx配置或特定的服务器配置中,甚至在特定的位置标记中也可以使用。
–奥汉
16-2-16在17:49
谢谢塞缪尔!让我从头疼的世界中解救出来,干杯和+1获得全面的解答!
–BastianBuhrkall
16年5月20日在9:29
#2 楼
在我的情况下,仅添加以下行是不够的:var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
我尝试按文档所述在urlencoded函数上添加parameterLimit选项,并且不再出现错误。
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是我缺少的另一个陷阱,感谢您指出这一点。
– crowebird
16年4月19日在15:49
添加“ parameterLimit:50000”可以解决该问题。
–安德烈·佩森(Andrien Pecson)
17年8月8日在7:32
在找到这个答案之前,我一直在为此苦苦挣扎。谢谢! #缓解
–斯蒂芬·塞利斯(Stephan Celis)
18年8月26日在7:30
#3 楼
如果有人尝试了所有答案,但还没有成功,并使用NGINX托管站点,则将此行添加到/ etc / nginx / sites-availableclient_max_body_size 100M; #100mb
评论
这是我的问题,谢谢!一个提示是,nginx的默认值为1MB,因此,如果您似乎受限于该数量,则可能是nginx。另外,还有一个提示:body-parser将在错误对象中返回limitproperty和length属性(以及status:413)。 Nginx不会这样做。因此,如果您在错误对象中看不到这些属性,则可能是nginx限制。这是更改此nginx设置的方法(最有可能在/ etc / nginx / sites-available /中的配置文件)
–user993683
17年6月2日在16:38
非常感谢您提供此答案,我认为应该对此答案予以推荐,因为它很重要,我个人忘记了nginx配置...再次非常感谢
–法迪·阿博·姆萨拉姆(Fadi Abo Msalam)
18年3月12日在20:21
如何仅在快递中设置限额?
–alexdykyі
18-10-31在14:32
Vivek22的@аlexdykyі答案:app.use(bodyParser({limit:'50mb'}));
–亚历山大
18年11月1日在23:20
谢谢!如果我没有发现这个答案,我会再追寻错误的解决方案2个小时。
–詹姆斯·弗兰克(James Flight)
5月20日9:15
#4 楼
我不认为这是明确的全局大小限制,但具体来说是connect.json中间件限制。当您使用express.bodyParser()
且不提供limit
选项时,默认情况下为100kb。尝试:
app.post('/api/0.1/people', express.bodyParser({limit: '5mb'}), yourHandler);
评论
嗨-我正在使用以下代码:app.get('/ api / 0.1 / people /',express.bodyParser({limit:'100mb'}),tracks.all);我仍然收到相同的错误...
–麦克·詹姆斯
13年11月12日20:50
默认限制为100 KB,因为现在看起来像github.com/expressjs/body-parser#limit
–吴琼
16年8月30日在16:14
#5 楼
就我而言..设置parameterLimit:50000
解决了问题app.use( bodyParser.json({limit: '50mb'}) );
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit:50000
}));
评论
这对我有用。 “请求实体太大”似乎也指向大字符串(如JSON)。我发布了〜20Kib JSON,并遇到了这个问题(请注意,默认的body-parser有效负载大小限制对我来说是可以的)。仅使用parameterLimit解决(无需设置任何限制)。
– aesede
16年7月20日在16:01
#6 楼
2016年,以上内容对我没有帮助,直到我为bodyparser明确设置了“类型”和“限制”,例如: var app = express();
var jsonParser = bodyParser.json({limit:1024*1024*20, type:'application/json'});
var urlencodedParser = bodyParser.urlencoded({ extended:true,limit:1024*1024*20,type:'application/x-www-form-urlencoded' })
app.use(jsonParser);
app.use(urlencodedParser);
评论
是的,这也是我需要做的。它已经设置好,因此您可以从应用脚本中驱动配置设置。
–罗布·萨德勒
16年6月30日在13:35
您的意思是application / x-www-form-urlencoded(而不是application / x-www-form-urlencoding)吗?
–手榴弹
17年6月15日在8:09
#7 楼
以下对我有用...只需使用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于2016年6月17日发表评论'评论
谢谢!我也有一个旧的app.use(bodyParser.json());实际上,在我的代码中,只有第一个被采用!
–尼科
18年11月24日在1:01
#8 楼
对于express〜4.16.0,具有limit的express.json可直接运行app.use(express.json({limit: '50mb'}));
#9 楼
就我而言,问题出在Nginx配置上。要解决它,我必须编辑文件:/etc/nginx/nginx.conf
并将此行添加到服务器块内:client_max_body_size 5M;
重新启动Nginx并解决问题
sudo systemctl restart nginx
#10 楼
经过许多尝试后,我得到了解决方案我已经评论了此行
app.use(bodyParser.json());
我放了
app.use(bodyParser.json({limit: '50mb'}))
然后起作用
评论
谢谢,这就是我所需要的!
–Anas
11月26日下午16:31
#11 楼
对于此问题,我使用了另一种方法,具有更高的依赖性。示例:
#12 楼
小老帖子,但我遇到了相同的问题使用express 4. +
我的代码看起来像这样,经过两天的广泛测试,它的工作效果很好。
var url = require('url'),
homePath = __dirname + '/../',
apiV1 = require(homePath + 'api/v1/start'),
bodyParser = require('body-parser').json({limit:'100mb'});
module.exports = function(app){
app.get('/', function (req, res) {
res.render( homePath + 'public/template/index');
});
app.get('/api/v1/', function (req, res) {
var query = url.parse(req.url).query;
if ( !query ) {
res.redirect('/');
}
apiV1( 'GET', query, function (response) {
res.json(response);
});
});
app.get('*', function (req,res) {
res.redirect('/');
});
app.post('/api/v1/', bodyParser, function (req, res) {
if ( !req.body ) {
res.json({
status: 'error',
response: 'No data to parse'
});
}
apiV1( 'POST', req.body, function (response) {
res.json(response);
});
});
};
#13 楼
稍有不同的方法-有效负载过大到目前为止,所有有用的答案都涉及增加有效负载限制。但是也可能是有效载荷确实太大但没有充分理由的情况。如果没有正当的理由,请考虑一下为什么它会如此肿。应用正在贪婪地发送有效负载中的整个对象。删除了一个肿的冗余属性后,有效负载大小减少了100倍。这显着提高了性能并解决了413错误。
#14 楼
对我来说,以下代码段解决了该问题。var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
#15 楼
就我而言,从请求标头中删除Content-type
起作用。#16 楼
更好的用法是指定文件大小的限制,如给定行中所示: -parser然后在lib文件夹中,有JSON和文本文件。然后在此处更改限制。实际上,如果您未在给定行中传递limit参数,则此条件通过。app.use(bodyParser.json({limit:'10mb',extended:true})))。
#17 楼
如果同时使用express.json()
和bodyParser,则由于express设置其自身的限制,将产生错误。 /> app.use(express.json());
app.use(express.urlencoded({ extended: false }));
#18 楼
我也面临这个问题,我通过重复如下所示的app.use(bodyParser.json())
犯了一个愚蠢的错误:#19 楼
我最近遇到了同样的问题,下面的解决方案对我有用。Dependency :
express >> version : 4.17.1
body-parser >> version": 1.19.0
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
对于理解:
HTTP 431
HTTP 413有效负载过大响应状态代码指示
请求实体大于服务器定义的限制;服务器
可能关闭连接或返回Retry-After标头字段。
#20 楼
对我来说,主要技巧是app.use(bodyParser.json({
limit: '20mb'
}));
app.use(bodyParser.urlencoded({
limit: '20mb',
parameterLimit: 100000,
extended: true
}));
bodyParser.json首先是
bodyParse.urlencoded第二是
#21 楼
对于那些在IIS下在Azure中启动NodeJS应用的用户,请不要忘记按照此处所述修改web.config,Azure App Service IIS的“ maxRequestLength”设置#22 楼
Express 4.17.1app.use( express.urlencoded( {
extended: true,
limit: '50mb'
} ) )
演示csb
#23 楼
下面的设置对我有用Express 4.16.1
app.use(bodyParser.json({ limit: '50mb' }))
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: false,
}))
Nginx
client_max_body_size 50m
client_body_temp_path /data/temp
评论
给任何遇到此问题的人的快速注释-确保您的问题实际上是节点服务器或主体解析器。例如,我正确使用了正文解析器,但出现此错误,因为我要在NGINX conf文件中设置最大正文大小。@StephenTetreault我想您应该添加它作为答案,尽管它当然并不适用于所有人,但这确实是发生在我身上的荣誉。