ExpressJS发布数据validation并强制执行数据types

如何以“优雅的方式”强制执行JavaScript的数据types? 假设在客户端预期有以下格式的发布请求,

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

在我的高速路由中,我会变得非常偏执,因为客户端可以发送任何东西(使用控制台,ajax或萤火虫等)。 因此,我会手动validation每个领域,我觉得非常繁琐和累人。 例如,

 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的结构,以确保发布的数据在结构上是有效的。 有时候这样做后,我感觉有点不舒服。 有人可以指出正确的方向吗? 这样做的做法有点矫枉过正? 我真的不必担心客户端可能会发送任何数据吗?

受欢迎的快速中间件请求validation和消毒:
快速validation
Expressvalidation器 (build立在节点validation器之上)

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

无论您是否需要逐个考虑问题,取决于您的安全问题以及您的错误信息是多么的重要。