NodeJS的JSON对象验证库

11

我需要在NodeJS应用程序中验证某些对象。我已经使用了一个很棒的库express-validator,它运行得很完美,但现在我需要验证不同的对象,不仅仅是请求。由于express-validator利用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它提供了必要的功能。

5个回答

7

5

一种解决方法是使用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);

1

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


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)

1
我即将开始验证JSON提交到我的Web服务,并且将使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接