it-swarm-ko.tech

오류 : 요청 개체가 너무 큽니다.

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

나는 meanstack을 사용하고 있습니다. 내 express.js에 다음 사용 문이 있습니다.

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

피들러 내에서 다음과 같은 값으로 콘텐츠 길이 헤더를 볼 수 있습니다 : 1078702

이것이 옥텟 단위라고 생각합니다. 이것은 1.0787 메가 바이트입니다.

나는 express가 내가 왜 스택 프로젝트 구조를 사용하지 않는 또 다른 익스프레스 프로젝트에 이전에 올린 json 배열을 게시하도록하지 않는지 전혀 모른다.

364
mike james

최근에 같은 오류가 있었고 찾은 모든 솔루션이 작동하지 않았습니다.

파고 난 후, app.use(express.bodyParser({limit: '50mb'})); 설정이 한계를 올바르게 설정 한 것을 발견했습니다.

node_modules/express/node_modules/connect/lib/middleware/json.js:46console.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 Request entity too large를받습니다.

그런 다음 node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10console.log('Limit file size: '+limit);을 추가하고 큰 요청 (오류 출력 이전)으로 경로를 호출 할 때 콘솔에서 다른 행을 보았습니다.

Limit file size: 1048576

이것은 어딘가에 connect이 한계 매개 변수를 재설정하고 지정한 것을 무시한다는 것을 의미합니다. 경로 정의에서 bodyParser 매개 변수를 개별적으로 지정하려고 시도했지만 운이 좋지 않습니다.

영구적으로 설정하는 적절한 방법을 찾지 못했지만 모듈에서 직접 " patch "할 수 있습니다. 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'}));을 추가했지만 after app.use(express.json());을 추가했습니다. 그런 다음 Express는 스크립트를 실행할 때 처음으로 파서가 express.json()이므로 전역 제한을 1mb로 설정했습니다. bodyParser 위로 이동하면 트릭을 수행했습니다.

즉, bodyParser() 방법은 Connect 3.0에서 더 이상 사용되지 않으므로 사용해서는 안됩니다. 대신 다음과 같이 파서를 명시 적으로 선언해야합니다.

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

파일 업로드를 위해 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}));

bodyParser.urlencoded()에 대해 extended 옵션이 명시 적으로 정의되어 있지 않으면 경고 (body-parser deprecated undefined extended: provide extended option)가 발생합니다. 이 옵션은 다음 버전에서 필요하며 not 은 더 이상 선택 사항이 아니기 때문입니다. extended 옵션에 대한 자세한 내용은 body-parserreadme 를 참조하십시오.

851
Samuel Bolduc

나는 익스프레스 4를 사용한다.

필자의 경우이 줄을 추가하는 것만으로는 충분하지 않았습니다.

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}));
83
slorenzo

누군가가 모든 해답을 시도했지만 아직 성공하지 못했고 NGINX를 사용하여 사이트를 호스팅하면/etc/nginx/sites-available에이 줄을 추가하십시오

client_max_body_size 100M; #100mb
36
Alexander

나는 이것이 명백한 전역 크기 제한이라고 생각하지 않지만, 특히 connect.json 미들웨어 제한 . express.bodyParser()을 사용하고 limit 옵션을 제공하지 않으면 기본적으로 100kb입니다.

시험:

app.post('/api/0.1/people', express.bodyParser({limit: '5mb'}), yourHandler);
28
Peter Lyons

내 경우에는 .. parameterLimit:50000를 설정하면 문제가 해결되었습니다.

app.use( bodyParser.json({limit: '50mb'}) );
app.use(bodyParser.urlencoded({
  limit: '50mb',
  extended: true,
  parameterLimit:50000
}));
11
Mohanad Obaid

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-urlencoding' })

  app.use(jsonParser);
  app.use(urlencodedParser);
10
user1709076

다음은 나를 위해 일했습니다 ... 그냥 사용하십시오.

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 일에 댓글을 달았습니다.'

7
Vivek22

익스프레스 ~ 4.16.0의 경우 익스프레스가있는 json은 직접 작동합니다

app.use(express.json({limit: '50mb'}));
4
Stenal P Jolly

조금 오래된 게시물이지만 나는 같은 문제가 있었다.

익스프레스 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);
        });
    });
};

많은 시도 후에 나는 나의 해결책을 얻었다.

나는이 줄을 주석 처리했다.

app.use(bodyParser.json());

나는 넣는다.

app.use(bodyParser.json({limit: '50mb'}))

그런 다음 작동합니다.

4
Maulik Patel

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);
};
3
Quentin Malguy

약간 다른 접근 - 탑재량 너무 큼

지금까지 유익한 해답은 페이로드 한도를 늘리는 것과 관련이 있습니다. 그러나 페이로드가 실제로 너무 크지 만 좋은 이유가없는 경우도있을 수 있습니다. 그것이 유효한 이유가 없다면, 왜 그렇게 부풀어 오르는 지 살펴보아야합니다.

우리 자신의 경험

예를 들어, 우리의 경우, Angular app는 유료 하중으로 전체 개체를 보내고있었습니다. 비대하고 중복 된 속성 하나가 제거되었을 때 페이로드 크기가 100 배 감소했습니다. 이로 인해 성능이 크게 향상되고 413 오류가 해결되었습니다.

3
Boaz

제 경우에는 문제가 Nginx 설정 에있었습니다. 그것을 해결하기 위해 파일을 편집해야합니다 : /etc/nginx/nginx.conf 그리고이 줄을 서버 블록 안에 추가하십시오 :

client_max_body_size 5M;

Nginx를 다시 시작하고 문제가 사라졌습니다.

Sudo systemctl restart nginx
2
Jaime Fernandez

스 니펫을 따라 문제를 해결했습니다.

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

주어진 줄에 표시된대로 파일 크기 제한을 더 잘 사용할 수 있습니다.

app.use(bodyParser.json({limit: '10mb', extended: true}))
app.use(bodyParser.urlencoded({limit: '10mb', extended: true}))

Node-modules body-parser에서 기본 설정을 변경 한 다음 lib 폴더에 JSON 및 텍스트 파일이 있습니다. 그런 다음 여기에서 한계를 변경하십시오. 실제로이 조건은 주어진 라인 app.use (bodyParser.json ({limit : '10mb', extended : true}))에서 limit 매개 변수를 전달하지 않으면 전달됩니다.

1
Ravi Beniwal

나도 그 문제에 직면했다. 나는 아래처럼 app.use(bodyParser.json())을 반복함으로써 바보 같은 실수를 저지르고 있었다 :

app.use(bodyParser.json())
app.use(bodyParser.json({ limit: '50mb' }))

app.use(bodyParser.json())을 (를) 제거하여 문제를 해결했습니다.

0
WasiF

나를 위해 주요 트릭은

app.use(bodyParser.json({
  limit: '20mb'
}));

app.use(bodyParser.urlencoded({
  limit: '20mb',
  parameterLimit: 100000,
  extended: true 
}));

bodyParser.json first bodyParser.urlencoded second

0
Nicollas Matheus