如何以“优雅的方式”强制执行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/