Javascript ExpressJS post数据验证和强制数据类型
如何以“优雅的方式”强制javascript的数据类型? 假设在客户端,预期会有以下格式的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等),我会
{
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框架,它内置了模式