错误:请求实体太大
我收到以下错误快递:
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));
在fiddler中,我可以看到内容长度标题,其值为:1078702
我相信这是八位字节,这是1.0787兆字节。
我不知道为什么express不让我发布我之前在另一个没有使用平均堆栈项目结构的快速项目中发布的json数组。
回答如下:我最近遇到了同样的错误,我找到的所有解决方案都没有用。
经过一番挖掘,我发现设置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/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,则行号可能会有所不同。请注意,这是不好的做法,如果您更新模块,它将被覆盖。
所以这个临时解决方案现在可以工作,但是一旦找到解决方案(或者模块已修复,以防模块出现问题),您应该相应地更新代码。
我已经打开an issue on their 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.urlencoded({limit: '50mb'}));
如果您需要multipart(用于文件上传),请参阅this post。
第二次编辑
请注意,在Express 4中,您必须使用express.json()
模块并使用其express.urlencoded()
和body-parser方法,而不是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
选项的更多信息,请参阅readme的body-parser
。
错误:请求实体太大
我收到以下错误快递:
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));
在fiddler中,我可以看到内容长度标题,其值为:1078702
我相信这是八位字节,这是1.0787兆字节。
我不知道为什么express不让我发布我之前在另一个没有使用平均堆栈项目结构的快速项目中发布的json数组。
回答如下:我最近遇到了同样的错误,我找到的所有解决方案都没有用。
经过一番挖掘,我发现设置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/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,则行号可能会有所不同。请注意,这是不好的做法,如果您更新模块,它将被覆盖。
所以这个临时解决方案现在可以工作,但是一旦找到解决方案(或者模块已修复,以防模块出现问题),您应该相应地更新代码。
我已经打开an issue on their 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.urlencoded({limit: '50mb'}));
如果您需要multipart(用于文件上传),请参阅this post。
第二次编辑
请注意,在Express 4中,您必须使用express.json()
模块并使用其express.urlencoded()
和body-parser方法,而不是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
选项的更多信息,请参阅readme的body-parser
。