我需要在NodeJS应用中验证一些对象。我已经使用了一个很棒的库express-validator,它运行得很完美,但是现在我需要验证不同的对象,不仅仅是请求,还有表达验证器利用validator
库,而这反过来又没有。{ t支持字符串类型以外的类型。
我找到了不同的变体,例如Jsonschema,Ajv
它们提供了很多功能,但我需要能够设置错误消息,而不仅仅是捕获异常或从返回对象解析它。 像那样
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它提供了必要的功能。
答案 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)
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