783 Stimmen

Fehler: Anforderungssatz zu groß

Ich erhalte den folgenden Fehler mit Express:

Fehler: Anforderungsentität zu groß
    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| 

Kann Eigenschaft 'host' von undefined nicht festlegen
    at eval (eval at  (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:152:8), :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

Ich verwende meanstack. Ich habe die folgenden Verwendungsanweisungen in meinem express.js

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

In Fiddler kann ich den Inhaltslängenheader mit einem Wert von: 1078702 sehen

Ich glaube, dies sind Oktette, das sind 1,0787 Megabyte.

Ich habe keine Ahnung, warum Express mich nicht den JSON-Array posten lässt, den ich zuvor in einem anderen Express-Projekt gepostet hatte, das nicht die Projektstruktur des Mean-Stack verwendet hat.

6voto

GrimR1P Punkte 152

Ein kleiner alter Beitrag, aber ich hatte das gleiche Problem

Bei Verwendung von Express 4.+ Sieht mein Code so aus und es funktioniert großartig nach zwei Tagen umfangreicher Tests.

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: 'Keine Daten zum Parsen'
            });
        }
        apiV1( 'POST', req.body, function (response) {
            res.json(response);
        });
    });
};

5voto

Quentin Malguy Punkte 279

Ich habe eine andere Methode für dieses Problem mit der Multer-Abhängigkeit verwendet.

Beispiel:

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

5voto

Promise Preston Punkte 15324

Um Alexanders Antwort hinzuzufügen.

Standardmäßig hat NGINX ein Upload-Limit von 1 MB pro Datei. Durch Begrenzung der Dateigröße von Uploads können Sie einige Arten von Denial-of-Service (DOS)-Angriffen und viele andere Probleme verhindern.

Wenn Sie versuchen, eine Datei über das 1MB-Limit hochzuladen, werden Sie auf einen 413 Fehler stoßen.

Durch Bearbeiten von client_max_body_size können Sie die Dateigröße für den Upload anpassen. Verwenden Sie den http, server oder location Block, um client_max_body_size zu bearbeiten.

server {
  server_name beispiel.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; # verwaltet von Certbot
    listen 443 ssl; # verwaltet von Certbot
    ssl_certificate /etc/letsencrypt/live/infohob.com/fullchain.pem; # verwaltet von Certbot
    ssl_certificate_key /etc/letsencrypt/live/infohob.com/privkey.pem; # verwaltet von Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # verwaltet von Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # verwaltet von Certbot

}

Referenz: Datei-Upload-Größe in NGINX begrenzen

5voto

Arbeite für mich:

Konfiguriere nginx maximale Dateigröße [https://patriciahillebrandt.com/nginx-413-request-entity-too-large/\]\[1]

und

app.use(bodyParser.json({ limit: "200mb" }));
app.use(bodyParser.urlencoded({ limit: "200mb",  extended: true, parameterLimit: 1000000 }));

5voto

Samuel França Punkte 51

Nachdem ich alles in diesem Beitrag versucht hatte, war ich erfolglos. Aber ich fand eine Lösung, die für mich funktionierte. Ich konnte es ohne den body-parser und nur mit dem express lösen. Es sah so aus:

const express = require('express');    

const app = express();
app.use(express.json({limit: '25mb'}));
app.use(express.urlencoded({limit: '25mb', extended: true}));

Vergiss nicht, extended: true zu verwenden, um die veraltete Meldung aus der Konsole zu entfernen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X