https://github.com/thekoushik/gateman
Simple and easiest JSON validator
https://github.com/thekoushik/gateman
javascript json validation
Last synced: 3 months ago
JSON representation
Simple and easiest JSON validator
- Host: GitHub
- URL: https://github.com/thekoushik/gateman
- Owner: thekoushik
- License: mit
- Created: 2018-12-27T07:58:48.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-28T07:47:56.000Z (over 3 years ago)
- Last Synced: 2025-09-15T07:00:03.737Z (10 months ago)
- Topics: javascript, json, validation
- Language: JavaScript
- Size: 235 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Gateman
Simple and easiest JSON validator
# Documentation
see [docs.md](docs.md)
# Installation
```
npm install gateman
```
# Basic Usage
```javascript
var gateman=require('gateman');
var validate=gateman({
name:"string|minlength:5|required",
age:"number|required",
dob:"date",
password:"required|minlength:4",
confirm_password:"same:password",
address:{
country:"string",
city:"string|required",
},
tags:["string|$maxcount:2"]
});
var err=validate({
name:"Koushik",
age:28,
dob:"1990-04-01",
address:{
country:"India"
},
password:"abcd",
confirm_password:"abcd",
tags:["javascript","json"]
});
if(!err) console.log("Valid");
else console.log(err);
```
# Rules
|Rule|Description|Param Type|Example|
|-|-|-|-|
|string|String type check| |``` { name: "string" } ```|
|number|Number type check| |``` { age: "number" } ```|
|date|Date or not| |``` { dob: "date" } ```|
|email|Email or not| |``` { email: "email" } ```|
|required|Value given or not| |``` { address: "required" } ```|
|requiredif|Required if another field is given|string| ``` { city: "string", address: "string | requiredif: city" } ``` |
|min|Minimum value check|number|``` { price: "min:100" } ```|
|max|Maximum value check|number|``` { price: "max:1000" } ```|
|minlength|Minimum length check|number|``` { password: "minlength:5" } ```|
|maxlength|Maximum length check|number|``` { description: "maxlength:200" } ```|
|digit|Number of digit check|number|``` { pincode: ["digit:6"] } ```|
|mindigit|Minimum number of digit check|number|``` { amount: ["mindigit:3"] } ```|
|maxdigit|Maximum number of digit check|number|``` { amount: ["maxdigit:6"] } ```|
|uppercase|All characters are uppercase or not| |``` { name: "uppercase" } ```|
|lowercase|All characters are lowercase or not| |``` { name: "lowercase" } ```|
|same|Value to be same as other field|string|``` { password: "minlength:5", confirm_password: "same:password" } ```|
|accepted|Value to be truthy(eg. ```true``` or ```1``` )| |``` { terms: "accepted" } ```|
|range|Value between 2 numbers(inclusive)| |``` { price: "range : 100 : 200" } ```|
# Array Rules
Array rules operate on whole array and are prefixed with `$` symbol.
|Rule|Description|Param Type|Example|
|-|-|-|-|
|required|Atleast one array item is required| |``` { address: ["$required"] } ```|
|count|Array length check|number|``` { tags: ["$count:2"]} ```|
|mincount|Minimum array length check|number|``` { tags: ["$mincount:2"] } ```|
|maxcount|Maximum array length check|number|``` { tags: ["$maxcount:2"] } ```|
## Using array rules in keys
```javascript
{
favourites:[
{
"$mincount": 2,
"$maxcount": 10,
rating:"number | required"
}
]
}
```
a valid json with respect to the above schema would be
```javascript
{
favourites:[
{
rating: 44
},{
rating: 22
}
]
}
```
# Using with ***expressjs***
```javascript
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var gateman = require('gateman');
//the following higher order function creates expressjs middleware
var validate = (schema, customMessages, customValidators)=>{
var validatorFn = gateman(schema, customMessages, customValidators);
return (req,res,next)=>{
var errors = validatorFn(req.body,{flatten:true});
if (errors) {
return res.status(422).json({
success: false,
error: errors
})
}
next();
}
}
//use the middleware
app.post('/demo', validate({
email:"email|required",
location:"string|required|minlength:10"
}), (req, res) => {
res.json({
success: true,
data: req.body
});
});
app.listen(8080, () => {
console.log('App is live at 8080');
});
```
# WIP