快速请求身体validation

我想创build一个快速中间件看起来像这样:

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

我已经用中间件选项以及窗体查看了两个节点validation器 ,但是他们都没有看起来像是可以将“规则集”传递给它们,并让它们针对提供的input运行规则。

有没有人有任何build议,如何做到这一点与这些模块或另一个,我还没有find呢? 我将不得不推出自己的做法吗?

UPDATE

这确实是为了validation表单post。 我知道不会有一个中间件将会覆盖整个站点的所有post; 这将只用于某些路线。 我想要可重复使用的中间件,因为我们正在制作具有通用路由的API,并期望我们希望以类似的方式validation常见的表单体,并且可以根据每个API调整该表单。

使用JSON模式

不知道更多关于你想要检查的具体事情,我认为基于JSON模式的工具可以为你提供很好的服务。 JSON模式指定了多种validation规则 。

节点模块的例子:

  • JaySchema
  • 阿曼达
  • JSON栅
  • 微小的validation器
  • JS-模式

我根据对Nipster的简单search“json schema”创build了这个列表。 我发现Nipster是一个很好的工具,可以快速浏览某个特定任务的好模块,因为它还包含了项目中叉子和github星号的数量,以此作为衡量stream行程度的指标,这反过来又经常说明模块的质量和成熟度。 当然不是盲目的,而是作为进一步研究的开始。

我期望实际上并不是所有JSON模式的模块都支持所有的validation规则,所以我认为你应该首先清点你实际需要什么样的规则(或者希望在未来可用),然后缩小你的select范围在那。

有一个用于JSON模式工具的官方testing套件 。 您可能希望查找宣传符合此套件的模块。

不使用JSON模式

你可能想要使用这样的模式:

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

我知道这是旧的,但对于那些正在寻找validation传入的请求主体,以及标题,路由参数和查询参数的好方法,请查看https://github.com/continuationlabs/celebrate

它利用Joi来validation具有声明方式的参数来重用和扩展validation规则。