栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

错误:请求实体太大

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

错误:请求实体太大

最近我遇到了相同的错误,发现的所有解决方案均无效。

经过一番挖掘,我发现设置

app.use(express.bodyParser({limit: '50mb'}));
确实正确设置了限制。

当添加一个

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

Limit file size: 1048576connect.multipart() will be removed in connect 3.0visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternativesconnect.limit() will be removed in connect 3.0Limit file size: 52428800Express server listening on port 3002

我们可以看到,首先,在加载

connect
模块时,限制设置为1mb(1048576字节)。然后,当我设置限制时,
console.log
再次调用,这次限制为52428800(50mb)。但是,我仍然得到一个
413Request 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,请在第46行添加

node_modules/express/node_modules/connect/lib/middleware/json.js

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()
方法将在Connect 3.0中弃用,并且不应该使用。相反,您应该显式声明解析器,如下所示:

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

[第二次编辑]

请注意,在Express 4中,必须使用body-parser模块而不是

express.json()
and
express.urlenpred()
,并使用其and
方法,如下所示:
json()``urlenpred()

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

如果

extended
未为明确定义该选项
bodyParser.urlenpred()
,则会抛出警告(
body-parser deprecatedundefined extended: provide extended option
)。这是因为此选项在下一版本中将是必需的,并且 不再
是可选的。有关更多信息
extended
选项,可以参考自述的
body-parser

[第三编辑]

似乎从Express v4.16.0起,我们可以回到执行此操作的初始方法):

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405035.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号