Экспресс-проверка Req.Body

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

function validate (options) {
  var defaultOptions = {...}
  , validations = _.extend(defaultOptions, options);
  return validate (req, res, next) {
      /* Use some sort of validation framework where I can pass `validations` into*/



      next(someErrors || null)
  }    
}

Я посмотрел на node-validator вариант промежуточного ПО, а также tracery но ни один из них не выглядел так, будто вы могли передать им "набор правил" и заставить их запускать правила против предоставленного ввода.

Есть ли у кого-нибудь какие-либо предложения о том, как это сделать с любым из этих модулей или с другим, который я еще не нашел? Могу ли я сделать это самостоятельно?

UPDATE

Это действительно проверка сообщений в форме. Я знаю, что не будет ни одного промежуточного программного обеспечения, которое будет охватывать все должности для всего сайта; это будет использоваться только для определенных маршрутов. Я хочу использовать многоразовое промежуточное программное обеспечение, потому что мы создаем API-интерфейсы, которые имеют общие маршруты, и ожидают, что тела общей формы, которые мы хотим проверить аналогичным образом, с возможностью настройки по каждому API-интерфейсу.

Ответ 1

Использование схемы JSON

Не зная больше о конкретных вещах, которые вы хотели бы проверить, я думаю, что инструменты, основанные на схеме JSON, могли бы вам очень хорошо, Схема JSON определяет много видов правил проверки.

Примеры модулей node:

Я сделал этот список на основе простого поиска "json schema" на Nipster. Я считаю, что Nipster - отличный инструмент для быстрого обзора хороших модулей для конкретной задачи, поскольку он также включает в себя число вилок и звезд github проекта как показатель популярности, который, в свою очередь, часто говорит о качестве и зрелости модуля, Конечно, не следует делать слепо, но как начало дальнейших исследований.

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

Там есть официальный официальный набор тестов для инструментов схемы JSON. Возможно, вам захочется найти модули, которые рекламируют соответствие этого пакета.

Не использовать схему JSON

Ответ 2

Вы можете использовать шаблон, подобный этому:

function validateRegForm(req, res, next){
  console.log('Validating form...');
  if(!req.body.password){
    return res.send(500, 'Need a password');
  };
  next();
};

app.post('/regForm'
, validateRegForm
, function(req,res){
  // If Express calls this fn, the previous fn did next(), not res.send()
  console.log('Doing something with this valid form');
  res.redirect('/regForm/complete');
});

Ответ 3

Я знаю, что это старо, но для тех из вас, кто ищет отличный способ проверки входящих тел запроса, а также заголовков, параметров маршрута и параметров запроса, проверьте https://github.com/continuationlabs/celebrate.

Он использует Joi для проверки аргументов, которые имеют декларативный способ повторного использования и расширения правил проверки.