routeguard
v1.0.2
Published
a lightweight middleware package that dynamically validates API routes based on a JSON schema or rules defined at runtime.
Maintainers
Readme
Route Guard
A flexible and extensible Node.js module for validating API requests based on predefined validation rules. This utility ensures that incoming requests conform to the required structure and data types, making your API more robust and secure.
Features
- Validate headers and body fields against defined rules.
- Support for required fields, type checking, and enumerated values.
- Detailed error reporting for invalid or missing fields.
Installation
Clone the repository:
git clone https://github.com/v0nser/routeguard.gitNavigate to the project directory:
cd routeguardInstall dependencies:
npm install
Usage
- Define Validation Rules
Create a rules.js file to define the validation rules for your API routes.
Example:
module.exports = {
'/api/users': {
headers: {
'api-key': { required: true },
},
body: {
username: { required: true, type: 'string' },
email: { required: true, type: 'string' },
roles: { required: true, type: 'object', enum: ['user', 'admin', 'manager'] },
},
},
};- Integrate the Validator
Use the RouteValidator class to validate incoming requests.
Example:
const RouteValidator = require('./RouteValidator');
const rules = require('./validatorRules');
const validator = new RouteValidator(rules);
const request = {
headers: {
'api-key': 'valid-api-key',
},
body: {
username: 'john_doe',
email: '[email protected]',
roles: ['user', 'admin'],
},
};
const result = validator.validate('/api/users', request);
if (result.isValid) {
console.log('Request is valid!');
} else {
console.error('Validation errors:', result.errors);
}Testing
Run the test suite:
npm testExample output:
PASS tests/validex.test.js
RouteValidator
✓ should reject invalid role values (50 ms)
✓ should reject missing required header (20 ms)
✓ should accept valid request (15 ms)
✓ should reject missing required body fields (18 ms)Project Structure
.
├── index.js # Core validation logic
├── rules.js # Predefined validation rules
├── tests
│ └── validex.test.js # Unit tests for RouteValidator
├── package.json # Project dependencies
└── README.md # Project documentationExample Scenarios
- Missing Required Header
- Request:
{
"headers": {},
"body": {
"username": "john_doe",
"email": "[email protected]"
}
}- Response:
{
"isValid": false,
"errors": [
{
"field": "headers.api-key",
"message": "api-key is required in headers."
}
]
}- Invalid Role Value
- Request:
{
"headers": {
"api-key": "valid-api-key"
},
"body": {
"username": "john_doe",
"email": "[email protected]",
"roles": ["user", "invalid-role"]
}
}- Response:
{
"isValid": false,
"errors": [
{
"field": "body.roles[1]",
"message": "Invalid value for roles"
}
]
}Contributing
Feel free to submit issues or pull requests to improve the validator. Contributions are welcome!
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contact For any questions or feedback, please contact:
- Name: Vaibhav Singh
- Email: [email protected]
- GitHub: v0nser
