在SailsJS中验证请求参数

时间:2014-11-27 10:00:34

标签: javascript validation sails.js

在SailsJS中,我想使用与在执行模型操作时验证模型相同的机制来验证请求参数。

因此,当您定义模型时,您使用"属性"用于指定参数属性的选项,然后将它们用于验证。

但是,如果您想要在服务器端验证登录表单或电子邮件表单,那么该怎么办呢?因此不需要模型,您只想验证参数?

所以我希望能够做到这样的事情:

//login validation
req.validate({
   email: { required: true, email: true },
   password: { required: true }
});

//send email validation
req.validate({
   subject: { required: true, type: 'string' },
   to: { required: true, type: 'string' },
   body: { required: true, type: 'string' }
});

函数req.validate混合用于所有请求,并且如果为请求设置了req.options.usage,则会调用该函数,我已经玩了一下但我不太明白什么它正在做。没有关于此的文档,也没有"anchor"中用于验证的文档。

有关如何实现此目标的任何帮助或建议(最好使用一些未记录的SailsJS功能)?

2 个答案:

答案 0 :(得分:1)

Sails req.validate()用于Sails的核心,如果你想在控制器中使用它,你必须使用try catch:

try{
    req.validate({
        email: { type: 'string' },
        password: { type: 'string' }
     });
}catch(err){
     return res.send(400, err);
}

或者它也可以设置req.flash错误...查看此文件以获取更多详细信息:

https://github.com/balderdashy/sails/blob/045fc6630fd915dce1abd89844e4164a9276a8cd/lib/hooks/request/validate.js

我已经在我自己的方法实现中使用了在v0.11中使用npm安装挂钩的新功能,migration guide

https://github.com/Josebaseba/sails-hook-validator

它仍在开发中,但我认为当风帆0.11到达时它会准备好。

答案 1 :(得分:1)

根据sailsjs docs Model Validations

  

注   这是 Model.validate({attributes},cb)的简写如果你没有先验证.save(),Waterline会尝试转换。如果它   不会,它会引发错误。在这种情况下,它会转换   数组到字符串' Marie,Hank'没有参数   除非出现错误,否则回调。没有消息就是好消息。这是   实例方法。目前,实例方法不是交易的。   因此,建议您使用等效模型   方法改为。

yourLoginModel.validate(req.body, function(err) {
    console.log(JSON.stringify(err));
});