如何以“优雅的方式”强制执行javascript的数据类型?
假设在客户端需要以下格式的发布请求,

{
   field1 : 123, //Number
   field2 : "HI", //String
   field3 : {
              subfield1: 1234
              subfield2: "asd"
            }
}


在我的快速路由中,由于客户端可以发送任何内容(使用控制台,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的结构,以确保发布数据在结构方面有效。有时这样做后,我感到有些不适。有人可以指出正确的方向吗?这种做事方式有点矫kill过正吗?我是否真的要担心客户端可以过帐任何数据?

最佳答案

流行的快速中间件,用于请求验证和清理:
Express validation
Express validator(建立在node-validator之上)

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

您是否需要视具体情况而担心,取决于您的安全问题以及错误的信息量。

关于javascript - ExpressJS发布数据验证和强制数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37653877/

10-11 14:48
查看更多