2016-08-11 4 views
0

Ich habe eine Anwendung gehostet auf Heroku, die eine riesige Menge von JSON sendet. Ich bekam ursprünglich einen BodyParser - Request-Entity zu groß Fehler (HTTP 400). Googeln um, stieß ich auf ein paar Stackoverflow/GitHub Ausgabe LinksSails Body Parser Konfiguration

(Sails.js bodyParser - request entity too large on version 0.10.5) (https://github.com/balderdashy/skipper/issues/144)

, in dem habe ich versucht, meine Aktualisierung http.js. Jetzt sieht mein Körper Parser wie folgt aus:

bodyParser: { 
    fn: require('skipper'), 
    options:{ 
    limit: '10mb' 
    } 
} 

Das die 400 Fehler behoben, aber jetzt habe ich einen Heroku H13 Störung erhalte:

2016-08-11T14:02:08.861774+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" 

An dieser Stelle Ich bin ein bisschen ratlos. Ich habe

(https://devcenter.heroku.com/articles/error-codes#h13-connection-closed-without-response) bei Heroku Dokumentation über eine H13 Fehler sah,

aber ich bin nicht sicher, ob

  1. ich mehr mit Heroku konfigurieren müssen (wie ich selbst darüber gehen würde) oder
  2. Machen Sie mehr mit Segel bodyParser Konfiguration oder
  3. Eine Kombination der beiden

Ich verwende derzeit die Version 0.11.2 von Sails.

[Update]

mehr Researching mich führen auf diese Links:

https://github.com/balderdashy/sails/issues/2653

https://github.com/balderdashy/skipper/issues/22

Ich bemerkte eine Person außerhalb des Middleware-Block ihre bodyParser Config hatte. Ich habe versucht, meine auch draußen zu bewegen, und es scheint das 400 und 503 H13 Heroku Problem zu beheben, das ich erhielt (und ich habe langsam von der Ausgabe weggetackert). Meine neue Frage ist, warum funktioniert das unten, besonders seit der BodyParser Kommentarblock ist innerhalb der Middleware-Block?

module.exports.http = { 
    /**************************************************************************** 
    *                   * 
    * Express middleware to use for every Sails request. To add custom   * 
    * middleware to the mix, add a function to the middleware config object and * 
    * add its key to the "order" array. The $custom key is reserved for   * 
    * backwards-compatibility with Sails v0.9.x apps that use the    * 
    * `customMiddleware` config option.           * 
    *                   * 
    ****************************************************************************/ 

    middleware: { 
    passportInit: require('passport').initialize(), 
    passportSession: require('passport').session(), 
    /*************************************************************************** 
    *                   * 
    * The order in which middleware should be run for HTTP request. (the Sails * 
    * router is invoked by the "router" middleware below.)      * 
    *                   * 
    ***************************************************************************/ 

    order: [ 
     'startRequestTimer', 
     'cookieParser', 
     'session', 
     'passportInit', 
     'passportSession', 
     'myRequestLogger', 
     'bodyParser', 
     'handleBodyParserError', 
     'compress', 
     'methodOverride', 
     'poweredBy', 
     '$custom', 
     'router', 
     'www', 
     'favicon', 
     '404', 
     '500' 
    ], 
    /**************************************************************************** 
    *                   * 
    * Example custom middleware; logs each request to the console.    * 
    *                   * 
    ****************************************************************************/ 

    // myRequestLogger: function (req, res, next) { 
    //  console.log("Requested :: ", req.method, req.url); 
    //  return next(); 
    // } 


    /*************************************************************************** 
    *                   * 
    * The body parser that will handle incoming multipart HTTP requests. By * 
    * default as of v0.10, Sails uses           * 
    * [skipper](http://github.com/balderdashy/skipper). See     * 
    * http://www.senchalabs.org/connect/multipart.html for other options.  * 
    *                   * 
    ***************************************************************************/ 

    // bodyParser: require('skipper') 

    }, 
    /*************************************************************************** 
    *                   * 
    * The number of seconds to cache flat files on disk being served by  * 
    * Express static middleware (by default, these files are in `.tmp/public`) * 
    *                   * 
    * The HTTP static cache is only active in a 'production' environment,  * 
    * since that's the only time Express will cache flat-files.    * 
    *                   * 
    ***************************************************************************/ 

    // cache: 31557600000 

    bodyParser: function() { 
    var opts = {limit:'10mb'}; 
    var fn; 

    // Default to built-in bodyParser: 
    fn = require('skipper'); 
    return fn(opts); 

    } 
}; 

Antwort

0

Sie können Ihre Middleware innerhalb und außerhalb des Middleware-Objekts platzieren. Wie der Doc sagt, legst du die Middlewares beiseite, die nicht der "App.use (Middleware)" Konvention folgen.

Da Ihre bodyparser Middleware require('skipper')({limit:'10mb'}) und nicht require('skipper') zurückgibt, was sehr unterschiedlich ist, folgt sie nicht der Konvention 'app.use (middleware)' und sollte wie Sie im Stammverzeichnis des http-Moduls abgelegt werden.

+0

Glühbirne ging aus - macht Sinn. Vielen Dank! – danieltjewett