【问题标题】:Node + Json format validatorNode + Json 格式验证器
【发布时间】:2016-11-13 04:09:06
【问题描述】:

我在服务器端有几个问题。

我有超过 50 个 API。

需要检查每个 API (GET,POST) 方法的以下内容。

  1. 验证输入是否为有效的 json。
  2. 输入数据需要检查一些键名与数据。

例如1:

{
        "name": "<city name1>",
        "status": 1,
        "id" : 3,
        "code" : 5,
        "abcd" : "44",
      ---------------
        ------------
}

在上面的输入中,我需要检查几个键是mantory。 eg:名称、代码

示例 2:

{
    "country": [
        {
            "state": [
                {
                    "name": "<city name1>",
                    "status": 1
                }, {
                    "name": "<city name2>",
                    "status": 2
                }, {
                    "name": "<city name3>",
                    "status": 3
                }
            ],
            "name": "<state Name1>"
        }, {
            "state": [
                {
                    "name": "<city name1>",
                    "status": 1
                }, {
                    "name": "<city name2>",
                    "status": 2
                }, {
                    "name": "<city name3>",
                    "status": 3
                }
            ],
            "name": "<state Name2>"
        }
    ]
}

在上面的示例中,我需要检查州和城市 > 名称是强制性的。

我检查了包裹,但没有找到适合我的。

是否有任何用于检查 json 验证的包?

【问题讨论】:

  • 你是怎么写你的api的。使用 express 之类的任何框架,或者您使用简单的 http 模块
  • 你也可以搜索 json schema json-schema.org。可能会有所帮助。

标签: json node.js validation


【解决方案1】:

我使用validator。它有很多功能,如 isEmail、isAlphaNumeric 等...

它还支持消毒。存储库中的示例和测试。

要检查键是否存在,您可以使用标准的 hasOwnProperty

Check if a key exists inside a json object

这些选项将很快,并且能够制作非常具体的自定义检查并将更好的错误消息反馈给消费者。

另一个选项是 json 模式。简单地检查代码(上图)可能会提高性能,但使用 json 架构,您可以在 api 中创建通用代码,为每个 api 加载架构文件,因此可能会导致更少的代码。

一个示例库。

https://www.npmjs.com/package/jsonschema

因此,这是更多/更少代码、性能以及您希望检查和错误消息的自定义程度之间的平衡。

【讨论】:

  • 我检查了包裹。但我无法验证。你能用例子写吗?这对我很有帮助。
  • 这个插件会检查key是否存在?
  • 我更新了帖子。这些应该让你朝着正确的方向前进。两者都有文档和示例。
  • 谢谢。如何检查输入数据是否为有效的 json 格式?
  • 如果你使用 express,bodyparser 会确保 req.body 是 json。 stackoverflow.com/questions/10005939/…
【解决方案2】:

如果你是美学家,请试试这个解决方案https://github.com/askucher/ftjs

npm install ftjs

您可以定义类型定义文件(示例)

#SimpleTypes

String         : /.?/

Integer        : Global.Integer

Int            : Integer

Boolean        : Global.Boolean

Bool           : Boolean

Double         : Global.Double

Numeric        : Double | Integer

Null           : Global.Null

Undefined      : Global.Undefined

Email          : /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i

Strings        : [String]

#TypeExtensions

String...
Min min        : /^.{#{min},}$/
Max max        : /^.{,#{max}}$/
Range min max  : /^.{#{min},#{max}}$/

Integer...
Min min        : @ >= min
Max max        : @ <= max


#Enums

Status         : "active" | "inactive"

Missing        : Null | Undefined


#ComplexTypes

User
------------
email          : Email
picture        : String
firstname      : String Range(5,20)
lastname       : String Min(5) Max(20)
status         : Status
bio            : String | Missing
tags           : [String]

 var types = require("ftjs");
   var fs = require("fs");

   var validate = types({
      System: fs.readFileSync("./examples/System.ft").toString("utf8")
   });

   var user = {
      email: 'a.stegno@gmail.com',
      picture: 'http://some-website.com/picture.png',
      firstname: 'Andrey',
      lastname: 'Test',
      status: 'active',
      bio: 'Ho',
      tags: ["user"]
   };

   validate("System.User", user); //true

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2016-06-29
    • 2019-10-17
    • 1970-01-01
    • 2014-06-14
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多