当前位置: 首页 > 知识库问答 >
问题:

错误:请求实体太大

张逸清
2023-03-14

我收到以下错误:

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中有以下use语句

//Set Request Size Limit
app.use(express.limit(100000000));

在fiddler中,我可以看到值为:1078702的content-length头

我相信这是以八位字节为单位的,这是1.0787兆字节。

我不知道为什么express不允许我在另一个express项目中发布我之前发布的json数组,该项目没有使用mean stack项目结构。

共有2个答案

傅正阳
2023-03-14

在我的例子中,仅仅加上这些行是不够的:

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}));
司空思聪
2023-03-14

我最近也犯了同样的错误,我找到的所有解决方案都不起作用。

经过一番挖掘,我发现设置app.use(express.bodyparser({limit:'50MB'}));确实正确设置了限制。

node_modules/express/node_modules/connect/lib/middleware/json.js:46中添加console.log('limit file size:'+limit);并重新启动节点时,我在控制台中得到以下输出:

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请求实体太大

然后我在node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10中添加了console.log('limit file size:'+limit);,并在调用具有较大请求的路由时(在错误输出之前)在控制台中看到了另一行:

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移动到它上面就成功了。

尽管如此,bodyParser()方法在Connect3.0中将不推荐使用,并且不应该使用。相反,您应该显式声明解析器,如下所示:

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

如果你需要多部分(文件上传),请看这篇文章。

[第二次编辑]

请注意,在Express 4中,您必须需要body-parser模块并使用其json()urlencode()方法,而不是Express.json()urlencode()方法,如下所示:

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

如果未为bodyparser.urlencoded()显式定义extended选项,它将抛出警告(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'}));
 类似资料:
  • 问题内容: 我收到express的以下错误: 我正在使用meanstack。我的express.js中有以下使用声明 在提琴手中,我可以看到content-length标头,其值为:1078702 我相信这是八位字节,这是1.0787兆字节。 我不知道为什么express不让我发布以前在另一个未使用均值堆栈项目结构的express项目中发布的json数组。 问题答案: 最近我遇到了相同的错误,发现

  • 我正试图将一个保存到一个嵌套中。但是当我尝试这么做时,服务器崩溃了,这就是我在控制台上看到的问题。日志: 有一件事是JSON请求的大小是1095922字节,在Nest中有人知道怎么做吗。js是否增加有效请求的大小?谢谢

  • 我一直在尝试将base64数据发送到bluemix中的节点red 但是它声明我的文件请求实体太大。。。 我一直在找。。。。bodyparser模块能处理这个问题吗?或者,有什么解决方案比更改代码更容易,因为我无法下载启动程序代码来操作,因为它会将我重定向到主页 非常感谢。

  • 问题内容: 在我的CakePHP网站之一中,出现此错误。 请求的实体太大 我不知道是什么问题。我认为我通过表单发布的数据太大。我在搜索引擎中进行了搜索,结果发现我必须增加搜索量。默认情况下,我认为它设置为8M。 但是不知道如何增加CakePHP以及如何做? 谢谢。 问题答案: 并且是PHP.ini设置。您可以直接在PHP.ini中或通过设置它们。我不知道是否也可以使用一些Cake-internal

  • 我已经用编写了一个WCF服务。NET 4.0,它托管在我的Windows 7Ultimate系统上,带有IIS 7.5。其中一个服务方法有一个'object'作为参数,我正试图发送一个包含图片的字节[]。只要这张图片的文件大小小于约48KB,一切正常。但是,如果我试图上传更大的图片,WCF服务将返回一个错误:

  • 我得到了以下错误与body Parser: 代码如下 好像和这个问题差不多 所以我尝试了这三种解决方案。 1. 2. 3. 但结果没有改变。 另一个设置如下所示 我不知道为什么我不能更改限制数据大小。