Javascript ExpressJS post数据验证和强制数据类型

Javascript ExpressJS post数据验证和强制数据类型,javascript,node.js,express,Javascript,Node.js,Express,如何以“优雅的方式”强制javascript的数据类型? 假设在客户端,预期会有以下格式的post请求 { field1 : 123, //Number field2 : "HI", //String field3 : { subfield1: 1234 subfield2: "asd" } } 在我的express路线中,由于客户端可以发送任何东西(使用控制台、ajax或firebug等),我会

如何以“优雅的方式”强制javascript的数据类型? 假设在客户端,预期会有以下格式的post请求

{
   field1 : 123, //Number
   field2 : "HI", //String
   field3 : {
              subfield1: 1234
              subfield2: "asd"
            }
}
在我的express路线中,由于客户端可以发送任何东西(使用控制台、ajax或firebug等),我会变得非常偏执。因此,我会手动验证我觉得非常乏味和累人的每个字段。比如说,

router.post('/api/add', function (req, res) {
    function validVariable(input) {
        return (typeof input !== 'undefined') && input;
    }
    if (!validVariable (req.body.field1)) {
        res.send("Not Valid");
    }
    if (!validVariable (req.body.field2)) {
        res.send("Not Valid");
    }   
    if (!validVariable (req.body.field3)) {
        res.send("Not Valid");
    }
    //Since everything is valid, time to check type
    if (typeof req.body.field1 != 'Number')) {
        res.send("Not Valid");
    }
    if (typeof req.body.field2 != 'String')) {
        res.send("Not Valid");
    }
    if (typeof req.body.field3 != 'Object')) {
        res.send("Not Valid");
    }
    //and so on...
});

我甚至必须检查JSON的结构,以确保post数据在结构上是有效的。在这样做了很长一段时间后,我感到有点不舒服。有人能指出正确的方向吗?这样做有点过分吗?我真的需要担心客户端可能会发布任何数据吗?

用于请求验证和清理的流行express中间件:

(构建在节点验证程序之上)

我使用后者,我发现语法让我编写的代码更少,中间件结构有助于提高可重用性


您是否需要担心,这取决于您的安全顾虑以及错误的信息量。

我建议您使用模式进行传入数据验证。看看这个,我自己也没用过,因为我使用的是total.js框架,它内置了模式