【问题标题】:NodeJS validation library for json objectsjson 对象的 NodeJS 验证库
【发布时间】:2017-11-28 12:22:01
【问题描述】:

我需要在我的 NodeJS 应用程序中验证一些对象。我已经使用了一个很棒的库express-validator,它运行良好,但现在我需要验证不同的对象,不仅是请求,而且就 express 验证器利用 validator 库而言,它不支持除字符串类型。

我发现了不同的变体,例如JsonschemaAjv

它们提供了很棒的功能,但我需要能够设置错误消息,而不仅仅是捕获异常或从返回对象中解析它。 就这样

 var schema = {
    "id": "/SimplePerson",
    "type": "object",
    "properties": {
      "name": {"type": "string", "error": "A name should be provided"},
      "address": {"$ref": "/SimpleAddress"},
      "votes": {"type": "integer", "minimum": 1}
    }
  };

所以我可以为每个属性设置错误消息。

是否有任何现有的解决方案来实现此功能?

可能的解决方案

我发现了一个很棒的库JSEN 它提供了必要的功能。

【问题讨论】:

    标签: json node.js validation jsonschema ajv


    【解决方案1】:

    可用于 JSON 验证的三个强大且流行的库是

    AJV: https://github.com/epoberezkin/ajv

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

    JSON 验证器: https://github.com/tdegrunt/jsonschema

    所有这些库都允许您验证不同的数据类型、进行条件验证以及设置自定义错误消息。

    【讨论】:

      【解决方案2】:

      我即将着手验证向我的 Web 服务提交的 JSON,并将使用 tcomb-validation。它是 JSON 模式的轻量级替代方案,基于类型组合器。

      intersections”示例:

      var t = require('tcomb-validation');
      var Min = t.refinement(t.String, function (s) { return s.length > 2; }, 'Min');
      var Max = t.refinement(t.String, function (s) { return s.length < 5; }, 'Max');
      var MinMax = t.intersection([Min, Max], 'MinMax');
      
      MinMax.is('abc'); // => true
      MinMax.is('a'); // => false
      MinMax.is('abcde'); // => false
      

      【讨论】:

        【解决方案3】:

        您也可以尝试nonvalid,这是一个支持基于回调的验证以及自定义检查和错误的库(免责声明:它是由我编写的)。

        【讨论】:

          【解决方案4】:

          一种解决方案是使用 Joi 库: https://github.com/hapijs/joi

          这个库维护良好,使用良好,并提供了很多灵活性和可能的​​操作。

          例子:

          const Joi = require('joi');
          
          const schema = Joi.object().keys({
              name: Joi.string().error(new Error('A name should be provided')),
              address: Joi.ref('$SimpleAddress'),
              votes: Joi.number().min(1),
          });
          
          // Return result.
          const result = Joi.validate(yourObject, schema);
          

          【讨论】:

            【解决方案5】:

            我用Json Pattern Validator

             npm install jpv --save
            

            用法

              const jpv = require('jpv');
            
              // your json object
              var json = {
                  status: "OK",
                  id: 123,
                  type: {}
              }
            
              // validation pattern
              var pattern = {
                  status: /OK/i,
                  id: '(number)',
                  type: '(object)'
              };
            
              var result = jpv.validate( json , pattern)
            

            【讨论】:

              猜你喜欢
              • 2015-02-20
              • 2018-08-21
              • 2017-10-15
              • 2015-10-24
              • 1970-01-01
              • 2012-01-15
              • 2011-07-03
              • 2021-05-18
              • 1970-01-01
              相关资源
              最近更新 更多