Метеор: объект запроса ошибки Iron-Router слишком велик - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь отправить данные с сервера js узла в приложение метеора. В приложении узла js я делаю это:

axios.put('http://localhost:3000/api/project/'+id,{"data" :data, "idExtractor":idExtractor, "version":getVersion()})

где data - это строка XML, предоставленная нашим сервером

И в моем метеорном приложении я получаю это по маршруту сервера в файле lib / Router.js, но когда данные слишком велики, метеорный сервер выдает мне сообщения об ошибках "зависание сокета" и "запрос объекта" большой».

Я попробовал решения проблем Iron Router на github, выполнив следующий код в файле Router.js.

if (Meteor.isServer) {
  Router.onBeforeAction(Iron.Router.bodyParser.raw({ 
    type: '/', 
    only: ['creditReferral'], 
    verify: function(req, res, body){
      req.rawBody = body.toString(); 
    },
    where: 'server'
  }));
  Router.onBeforeAction(Iron.Router.bodyParser.urlencoded({
    extended: true,
    limit : '10mb'
  }));
  Router.onBeforeAction(Iron.Router.bodyParser.urlencoded({
    extended: true,
    limit : '10mb' 
  }), 
  { where: 'server'});
}

Я пытался поместить его перед всеми определениями маршрутов, перед серверными маршрутами, после всех маршрутов, я также пытался поместить его в server / main.js в блоке запуска.

Я также пытался изменить эти ограничения на сервере узлов с помощью этого

express.urlencoded({
  limit: '10mb', 
  extended: true, 
  type: "application/x-www-form-urlencoded"
})
express.json({
  limit: '10mb', 
  strict: false, 
  type: "application/json"
})

и это

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

Но у меня всегда одна и та же проблема, вся помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 июля 2018

Попробовав множество решений, я исправил эту проблему в своем Router.js:

if (Meteor.isServer) {
    Router.onBeforeAction( Iron.Router.bodyParser.json({
        limit: '50mb'
    }), {
        except: ['creditReferral'],
        where: 'server'
    });
    Router.onBeforeAction( Iron.Router.bodyParser.raw({
        type: '*/*',
        only: ['creditReferral'],
        verify: function(req, res, body){
            req.rawBody = body.toString();
        },
        where: 'server'}));
}

Это исправило слишком большую ошибку сущности, но поскольку в этом запросе данные были XML-данными, я не смог напрямую разобрать их в json, поэтому мне нужно было изменить

var json = JSON.parse(this.request.body) 

к следующему:

var stringify = JSON.stringify(this.request.body);
var json = JSON.parse(stringify);

и это сработало. Надеюсь, что это может помочь кому-то с такой же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...