Конфигурация парсера Body Parser

У меня есть приложение, размещенное на Heroku, которое отправляет огромное количество JSON. Первоначально я получал bodyParser - запрос слишком большой ошибки сущности (HTTP 400). Погуглив, я наткнулся на несколько ссылок на вопросы stackru/github

( Sails.js bodyParser - запрос слишком велик для версии 0.10.5) ( https://github.com/balderdashy/skipper/issues/144)

в котором я пытался обновить мой http.js. Теперь мой парсер тела выглядит так:

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

Это решило ошибку 400, но теперь я получаю ошибку Heroku H13:

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

На данный момент, я немного озадачен. Я посмотрел документацию Heroku об ошибке H13

( https://devcenter.heroku.com/articles/error-codes),

но я не уверен, если

  1. Мне нужно настроить больше с Heroku (как я бы даже об этом) или
  2. Сделайте больше с настройкой Sails bodyParser или
  3. Сочетание двух

В настоящее время я использую версию 0.11.2 Sails.

[Обновить]

Исследования больше приведут меня к этим ссылкам:

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

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

Я заметил, что у человека была конфигурация bodyParser вне блока промежуточного программного обеспечения. Я также попытался вытащить свою наружу, и это, кажется, решило проблему Heroku 400 и 503 H13, которую я получал (и я медленно отмахнулся от этой проблемы). Мой новый вопрос: почему работает нижеследующее, тем более что блок комментариев bodyParser находится внутри блока промежуточного программного обеспечения?

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

  }
};

1 ответ

Решение

Вы можете разместить свое промежуточное программное обеспечение внутри и снаружи объекта промежуточного программного обеспечения. Как сказано в документе, вы помещаете вне промежуточного программного обеспечения, которое не следует соглашению app.use(middleware).

Так как ваше промежуточное программное обеспечение bodyparser возвращается require('skipper')({limit:'10mb'}) и не require('skipper') который сильно отличается, он не следует соглашению app.use(middleware) и должен быть размещен снаружи, в корне модуля http, как вы это сделали.

Другие вопросы по тегам