Поймать незаконные данные JSON POST в Express? - PullRequest
13 голосов
/ 20 сентября 2011

При создании запроса POST с допустимым JSON bodyParser правильно анализирует тело запроса POST.Тем не менее, если я отправляю недопустимую строку JSON в качестве тела, я получаю сообщение об ошибке:

SyntaxError: Unexpected token ILLEGAL
at parse (native)
at IncomingMessage.<anonymous>(/home/.../middleware/bodyParser.js:69:15)
...

Итак, похоже, что синтаксический анализатор тела не выполняется во время синтаксического анализа тела.Тем не менее, я хотел бы поймать эту ошибку и вернуть ошибку.Я не уверен, что я могу сделать, чтобы поймать это, поэтому любая помощь будет оценена.Спасибо.

Ответы [ 4 ]

1 голос
/ 16 апреля 2012

Попробуй поставить

app.use (express.bodyParser ()); после app.use (express.errorHandler (...))

решил это за меня.

Вы также можете адаптировать следующий код для управления ошибкой

express.bodyParser.parse['application/json'] = function(req, options, fn){
  var buf = '';
  req.setEncoding('utf8');
  req.on('data', function(chunk){ buf += chunk });
  req.on('end', function(){
  try {
    req.body = buf.length
      ? JSON.parse(buf)
      : {};
    fn();
  } catch (err){
    fn(new Error('Problems parsing JSON'));
  }
 });
};
1 голос
/ 29 октября 2011

По какой-то причине при использовании express / connect JSON.parse не выдает исключений, поэтому ваш обработчик ошибок не срабатывает.

Я зарегистрировал проблему с помощью express, чтобы узнать, что происходит, но пока вы можете использовать этот обходной путь:

express.bodyParser.parse['application/json'] = function(data) {
  var result = JSON.parse(data)
  if (typeof result != 'object') {
    throw new Error('Problems parsing JSON')
  }
  return result;
}
app.use(express.bodyParser());

обновление: эта проблема не знакома автору экспресса, поэтому мне интересно, если это другая библиотекавызывая это.Придется разбирать мой код по частям, чтобы выяснить, где это поведение вводится.

0 голосов
/ 07 февраля 2013

bodyParser должен быть выше app.use (app.router), это не имеет значения относительно расположения обработчика ошибок, как Perki

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