用于json对象的NodeJS验证库

时间:2017-06-25 12:50:25

标签: json node.js validation jsonschema ajv

我需要在NodeJS应用中验证一些对象。我已经使用了一个很棒的库express-validator,它运行得很完美,但是现在我需要验证不同的对象,不仅仅是请求,还有表达验证器利用validator库,而这反过来又没有。{ t支持字符串类型以外的类型。

我找到了不同的变体,例如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它提供了必要的功能。

5 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

One solution is to use Joi library : 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);

答案 2 :(得分:1)

我使用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)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我将开始验证向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