JSON内容发布请求验证实践

时间:2016-06-02 05:59:31

标签: javascript json node.js validation express

对于NodeJS,Express 4, 有时我写一个路由,客户端会发送这种JSON数据进行处理,

{
   "data" : "xx" 
   "nested" : {
         field1: "111",
         field2: "222"
   } 
}

然后在服务器端,我经常发现自己做了很多手动验证,比如

if (!validVariable(req.body.data)) //error
if (!validVariable(req.body.nested)) //error
if (validVariable(req.body.nested)) {
    if (!validVariable(req.body.nested.field1) // error
    if (!validVariable(req.body.nested.field2) // error
}
.....
function validVariable(input) {
    return (typeof input !== 'undefined') && input;
}

在安全地访问post请求内容之前总是测试结构是非常繁琐的,如果我继续使用req.body.nested.field1由于req.body.nested的空指针异常,我可能会崩溃服务器。

我认为表单内容的服务器验证是否繁琐?人们通常做什么? 我查看了node-validator,express-validator,看起来真的很有用但是手动测试json数据?还有更好的方法吗?

而且,我对客户端发送的数据类型非常警惕,为了更进一步,我实际上是在考虑手动检查数据类型吗? isBoolen? isInt? isString等。听起来真的很乏味,所以任何有关javascript验证的见解都会非常有用! 谢谢!

2 个答案:

答案 0 :(得分:1)

为此,我一直在使用Ajv库。它对我来说效果很好。只需在下面

1)定义您期望的请求架构。您必须在架构定义中指定必需的字段和数据类型。

2)导入并安装库,使用

验证请求
 var valid = ajv.validate(schema,request);

检查valid验证状态,并ajv.errors查看有关请求错误的详细信息。 有关详细信息,请参阅https://github.com/epoberezkin/ajv

答案 1 :(得分:0)

查看https://github.com/hapijs/joi

首先定义一个模式,然后验证你的json。