mik*_*mes 416 javascript http node.js 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
Run Code Online (Sandbox Code Playgroud)
我正在使用meanstack.我在express.js中有以下用法语句
//Set Request Size Limit
app.use(express.limit(100000000));
Run Code Online (Sandbox Code Playgroud)
在fiddler中,我可以看到内容长度标题,其值为:1078702
我相信这是八位字节,这是1.0787兆字节.
我不知道为什么express不让我发布我之前在另一个没有使用平均堆栈项目结构的快速项目中发布的json数组.
Sam*_*duc 903
我最近遇到了同样的错误,我找到的所有解决方案都没有用.
经过一番挖掘,我发现设置app.use(express.bodyParser({limit: '50mb'}));确实正确设置了限制.
添加console.log('Limit file size: '+limit);in node_modules/express/node_modules/connect/lib/middleware/json.js:46和restarting节点时,我在控制台中获得此输出:
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
Run Code Online (Sandbox Code Playgroud)
我们可以看到,首先,加载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
Run Code Online (Sandbox Code Playgroud)
这意味着在某种程度上,某处,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
Run Code Online (Sandbox Code Playgroud)
如果您不运行相同版本的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.urlencoded({limit: '50mb'}));
Run Code Online (Sandbox Code Playgroud)
如果您需要multipart(用于文件上传),请参阅此帖子.
第二次编辑
请注意,在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}));
Run Code Online (Sandbox Code Playgroud)
如果extended未明确定义该选项bodyParser.urlencoded(),则会抛出警告(body-parser deprecated undefined extended: provide extended option).这是因为在下一个版本中将需要此选项,并且不再是可选的.有关更多信息extended选项,请参阅自述的body-parser.
slo*_*nzo 96
我使用Express 4.
在我的情况下,添加这些行是不够的:
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
Run Code Online (Sandbox Code Playgroud)
我尝试在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}));
Run Code Online (Sandbox Code Playgroud)
Ale*_*der 40
如果有人尝试了所有的答案,但尚未取得任何成功,并使用NGINX来托管该网站,请将此行添加到/ etc/nginx/sites-available
client_max_body_size 100M; #100mb
Run Code Online (Sandbox Code Playgroud)
Pet*_*ons 28
我认为这不是明确的全局大小限制,而是具体的connect.json中间件限制.默认情况下,当您使用express.bodyParser()并且不提供limit选项时,这是100kb .
尝试:
app.post('/api/0.1/people', express.bodyParser({limit: '5mb'}), yourHandler);
Run Code Online (Sandbox Code Playgroud)
小智 16
下面的设置对我有用
快递4.16.1
app.use(bodyParser.json({ limit: '50mb' }))
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: false,
}))
Run Code Online (Sandbox Code Playgroud)
nginx
client_max_body_size 50m;
client_body_temp_path /data/temp;
Run Code Online (Sandbox Code Playgroud)
Yil*_*maz 13
此问题发生在两种情况下:
1-请求正文太大,服务器无法处理这么大的数据。这会为它服务
app.use(express.json({limit: '50mb'}));
Run Code Online (Sandbox Code Playgroud)
2-req.cookies太大。在同一浏览器上测试不同的 next.js 应用程序时,如果正在运行一些应用程序,则每次每个应用程序都会在不同的端口上启动。同一应用程序最终可能会从端口 3000-3005 范围启动。这意味着如果您的应用程序保存 cookie,则将为每个端口保存该 cookie。假设您在 localhost:3000 启动了 5 个不同的应用程序,每个应用程序都保存了一个 cookie。如果您发出请求,所有 cookie 将附加到请求对象,在这种情况下,您将无法处理即使很小的post.body. 解决办法是你必须删除所有cookie
小智 12
在我的情况下..设置parameterLimit:50000修复了问题
app.use( bodyParser.json({limit: '50mb'}) );
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit:50000
}));
Run Code Online (Sandbox Code Playgroud)
use*_*076 11
2016年,除了bodyparser的'limit'之外,除了明确设置'type'之外,以上都没有为我工作,例如:
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);
Run Code Online (Sandbox Code Playgroud)
Boa*_*oaz 11
到目前为止,所有有用的答案都涉及增加有效负载限制。但也可能是有效载荷确实太大,但没有充分的理由。如果没有正当理由,请考虑首先调查一下为什么它如此臃肿。
例如,在我们的例子中,Angular 应用程序贪婪地发送有效负载中的整个对象。当删除一个臃肿且冗余的属性时,有效负载大小减少了 100 倍。这显着提高了性能并解决了 413 错误。
Aka*_*nja 10
只需添加这一行就可以实际解决它
app.use(express.json({limit: '50mb'}));
Run Code Online (Sandbox Code Playgroud)
还建议你们将整个图像发送到后端然后进行转换,而不是从前端发送数据
以下对我有用......只需使用
app.use(bodyParser({limit: '50mb'}));
Run Code Online (Sandbox Code Playgroud)
而已.
尝试以上所有,没有工作.发现即使我们使用如下,
app.use(bodyParser());
app.use(bodyParser({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb'}));
Run Code Online (Sandbox Code Playgroud)
只有第app.use(bodyParser());一个被定义,后两个被忽略.
参考:https://github.com/expressjs/body-parser/issues/176 >>参见'dougwilson于2016年6月17日发表评论'
小智 9
就我而言,问题出在Nginx 配置上。为了解决它,我必须编辑文件:/etc/nginx/nginx.conf并在服务器块中添加这一行:
client_max_body_size 5M;
Run Code Online (Sandbox Code Playgroud)
重启 Nginx 问题就解决了
sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)
经过多次尝试,我得到了解决方案
我已经评论了这一行
app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)
我把
app.use(bodyParser.json({limit: '50mb'}))
Run Code Online (Sandbox Code Playgroud)
然后它工作
小智 7
将以下配置传递到您的服务器以增加您的请求大小。
app.use(express.json({ extended: false, limit: '50mb' }))
app.use(express.urlencoded({ limit: '50mb', extended: false, parameterLimit: 50000 }))
Run Code Online (Sandbox Code Playgroud)
小旧帖子,但我遇到了同样的问题
使用 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);
});
});
};
Run Code Online (Sandbox Code Playgroud)
小智 6
对于Express〜4.16.0,具有limit的express.json可直接工作
app.use(express.json({limit: '50mb'}));
Run Code Online (Sandbox Code Playgroud)
添加到亚历山大的答案。
默认情况下,NGINX 每个文件的上传限制为 1 MB。通过限制上传的文件大小,您可以防止某些类型的拒绝服务 (DOS) 攻击和许多其他问题。
因此,当您尝试上传超过 1MB 限制的文件时,您将遇到 4 13 错误。
通过编辑client_max_body_size,您可以调整文件上传大小。使用http、、server或location块进行编辑client_max_body_size。
server {
server_name example.com;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
client_max_body_size 20M;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/infohob.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/infohob.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
Run Code Online (Sandbox Code Playgroud)
我已经使用另一种做法来解决这个问题的 multer Dependancie。
例子:
multer = require('multer');
var uploading = multer({
limits: {fileSize: 1000000, files:1},
});
exports.uploadpictureone = function(req, res) {
cloudinary.uploader.upload(req.body.url, function(result) {
res.send(result);
});
};
module.exports = function(app) {
app.route('/api/upload', uploading).all(uploadPolicy.isAllowed)
.post(upload.uploadpictureone);
};
Run Code Online (Sandbox Code Playgroud)
小智 5
如果你同时使用express.json()和bodyParser ,它会给出错误,因为express设置了它自己的限制。
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
Run Code Online (Sandbox Code Playgroud)
删除上面的代码,只添加下面的代码
app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb", extended: true, parameterLimit: 1000000 }));
Run Code Online (Sandbox Code Playgroud)
小智 5
在尝试了这篇文章中的所有内容后,我没有成功。但我找到了一个对我有用的解决方案。我能够在不使用body-parser且仅使用express 的情况下解决它。它看起来像这样:
const express = require('express');
const app = express();
app.use(express.json({limit: '25mb'}));
app.use(express.urlencoded({limit: '25mb', extended: true}));
Run Code Online (Sandbox Code Playgroud)
不要忘记使用Extended: true从控制台中删除已弃用的消息。
小智 5
为我工作:
配置 nginx 最大文件 zise [https://patriciahillebrandt.com/nginx-413-request-entity-too-large/][1]
和
app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb", extended: true, parameterLimit: 1000000 }));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
274357 次 |
| 最近记录: |