如何以“优雅的方式”强制执行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的结构,以确保帖子数据在结构方面是有效的。有时做这件事后,我感觉有点不舒服。有人可以指出正确的方向吗?这种做事方式有点矫枉过正吗?我真的不得不担心客户端可能会发布任何数据吗?
答案 0 :(得分:1)
用于请求验证和清理的流行快速中间件:
Express validation
Express validator(建立在node-validator之上)
我使用后者,我发现语法可以让我编写更少的代码,中间件结构有助于重用。
您是否必须根据具体情况担心,具体取决于您的安全问题以及您的错误信息量。