Содержимое тела Sails.js, когда Content-Type имеет значение text/csv

Нужно ли мне делать что-то особенное для обработки POST запросов с текстовым Content-Type?

Мне нужно обработать text/csv, но когда я добираюсь до метода в своем контроллере, похоже, что Sails.js пытался разобрать тело как JSON:

postStuff: function(req, res) {
    sails.log.info("postStuff")
    sails.log.info(req.body)
    sails.log.info(req.headers['content-type']);
...etc...

дает мне:

info: postStuff
info: {}
info: text/csv

Я нахожу документацию по промежуточному программному обеспечению bodyParser немного неясной.

FWIW, я также пытался установить Content-Type как text/plain в запросе, но безрезультатно.

Я также попытался явно добавить текстовый bodyParser в качестве промежуточного программного обеспечения, что, похоже, не имело никакого эффекта:

http.js

module.exports.http = {
  bodyParserText: require('body-parser').text(),
  middleware: {
    order: [
      'startRequestTimer',
      'cookieParser',
      'session',
      'myRequestLogger',
      'bodyParser',
      'bodyParserText',
      'handleBodyParserError',
      'compress',
      'methodOverride',
      'poweredBy',
      '$custom',
      'router',
      'www',
      'favicon',
      '404',
      '500'
    ],
...etc...

person denishaskin    schedule 18.07.2015    source источник
comment
Обратите внимание, что порядок bodyParserText в списке middleware.order также не имеет никакого значения.   -  person denishaskin    schedule 18.07.2015


Ответы (1)


Вау, это оказалось просто... но раздражающе сложно отлаживать из-за отсутствия обратной связи от фреймворка.

В https.js элемент для нового промежуточного ПО должен был находиться внутри элемента middleware... что, конечно, имеет смысл:

module.exports.http = {
  // NOT HERE
  //  bodyParserText: require('body-parser').text(),
  middleware: {
    // HERE
    bodyParserText: require('body-parser').text(),
    order: [
      'startRequestTimer',
      'cookieParser',
      'session',
      'myRequestLogger',
      'bodyParser',
      'bodyParserText',
      'handleBodyParserError',
...etc...

Было бы неплохо, если бы Sais.js (экспресс?) выдал предупреждение, так как я предполагаю, что он не смог найти bodyParserText.

person denishaskin    schedule 19.07.2015