【问题标题】:JSON content post request validation practiceJSON 内容发布请求验证实践
【发布时间】:2016-06-02 05:59:30
【问题描述】:

对于 NodeJS,Express 4, 有时我会写一条路由,让客户端发送此类 JSON 数据进行处理,

{
   "data" : "xx" 
   "nested" : {
         field1: "111",
         field2: "222"
   } 
}

然后在服务器端,我经常发现自己在做很多手动验证,例如

if (!validVariable(req.body.data)) //error
if (!validVariable(req.body.nested)) //error
if (validVariable(req.body.nested)) {
    if (!validVariable(req.body.nested.field1) // error
    if (!validVariable(req.body.nested.field2) // error
}
.....
function validVariable(input) {
    return (typeof input !== 'undefined') && input;
}

在安全访问 post 请求内容之前总是测试结构是非常乏味的,如果我继续使用 req.body.nested.field1,我可能会由于 req.body.nested 的空指针异常而导致服务器崩溃。

我不认为表单内容的服务器验证很乏味吗?人们通常会做什么? 我看过 node-validator, express-validator ,它看起来真的很有用,但是手动测试 json 数据?有没有更好的办法?

而且,我对客户端发送的数据类型非常谨慎,为了更进一步,我实际上正在考虑手动检查数据类型,例如?是布尔吗?是整数吗? isString 等。这听起来真的很乏味,所以任何关于 javascript 验证的见解都会非常有帮助! 谢谢!

【问题讨论】:

  • 您的问题似乎与 JSON 无关,而与如何安全访问嵌套对象有关。 JSON 只是文本。希望这可以帮助您现在使用更好的搜索词并找到已经存在的问题。
  • 检查 json-schema.org 他们有多种语言的验证器

标签: javascript json node.js validation express


【解决方案1】:

我一直在为此使用 Ajv 库。它对我来说效果很好。只需在下面做

1) 定义您期望的请求模式。您必须在架构定义中指定必填字段和数据类型。

2) 导入并安装库,使用验证请求

 var valid = ajv.validate(schema,request);

检查valid 以了解验证状态,ajv.errors 了解有关请求错误的详细信息。 更多详情请参考https://github.com/epoberezkin/ajv

【讨论】:

    【解决方案2】:

    看看https://github.com/hapijs/joi

    您首先定义一个架构,然后验证您的 json。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2021-03-28
    相关资源
    最近更新 更多