Подтвердить что ты не робот

Поймать незаконные данные JSON POST в Express?

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

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

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

4b9b3361

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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