UNPKG

api-req-validator

Version:
165 lines (136 loc) 5.78 kB
# Request Validation Middleware for Node.js This middleware simplifies API request validation in Node.js applications. Instead of writing separate validation logic for each API, you can define a schema in a single configuration file. The middleware dynamically validates all incoming requests against the schema, ensuring consistency and reducing boilerplate code. ## Features - **Dynamic Validation**: Validate API requests using a central schema file. - **Flexible Rules**: Supports data types, regex, nested objects, allowed values, and more. - **Easy Integration**: Middleware integrates seamlessly with any Node.js application. - **Centralized Schema**: Define validation rules for all APIs in a single file. ## Supported Data Types The middleware supports validation for the following data types: - `string` - `email` - `int` - `float` - `alphanumeric` - `alpha` - `bool` - `mobile` - `date` - `array` ## Validation Checks The middleware can perform the following checks: - **Mandatory Checks**: Ensures required fields are provided. - **Data Type Checks**: Validates fields against specified data types such as `string`, `int`, `float`, etc. - **Regex Validation**: Applies custom regular expressions for additional checks. - **Min and Max Value Checks**: Ensures numeric values are within the specified range (for `int` and `float`). - **Length Checks**: Validates the maximum length of strings. - **Allowed Values**: Ensures fields contain only specified values. - **Array Validation**: Supports arrays of `number`, `string`, `mobile`, `bool`, and `float`. For simple arrays of basic data types, you can use rules like: - `dataType: "array+numbers"` - `dataType: "array+basicdataType"` For more complex arrays of objects, you can define rules using dot notation. For example: ```javascript "users.*.username": { required: true, dataType: "string" }, "users.*.age": { required: true, dataType: "int", min: 18 } ``` ## Future Enhancements In upcoming versions, we plan to introduce support for custom validators. This feature will allow developers to define custom validation logic for specific APIs, providing even greater flexibility. ## Installation ```bash npm i api-req-validator ``` ## Usage ### Step 1: Define the Schema Create a file (e.g., `validationSchema.js`) that exports the validation schema. The schema must follow the format below: ### What is a Schema? A schema is a structured representation of the expected fields, their types, and rules for validation for each API endpoint. Each field in the schema can have properties such as: - **`required`**: Specifies if the field is mandatory. - **`dataType`**: Defines the type of data expected (e.g., string, int, date). - **`regex`**: Custom regex for additional validation. - **`length`**: Maximum length for string fields. - **`allowedValues`**: A list of permissible values for the field. - **`min` and `max`**: Range for numeric fields. ### Example Schema File ```javascript const schema = { "/api/login": { username: { required: true, dataType: "string", length: 50 }, password: { required: true, dataType: "string" }, }, "/api/register": { email: { required: true, dataType: "email" }, age: { required: false, dataType: "int", min: 18 }, }, }; module.exports = { schema }; ``` ### Writing an API Schema Each API schema is defined as a key-value pair where the key is the API route, and the value is an object containing the validation rules for the fields in the request body. Example: ```javascript "/api/example": { "fieldName": { required: true, dataType: "string", length: 100 }, "nestedField": { key: { required: true, dataType: "int", min: 1 } } } ``` ### Step 2: Use the Middleware Integrate the middleware into your Node.js application. ```javascript const express = require("express"); const {validateRequestHandler} = require('api-req-validator'); const app = express(); // Middleware to parse JSON requests app.use(express.json()); //Get absolute file path const filePath = path.resolve(__dirname,"./apiSpecification.js"); // Apply the validation middleware and apss the file path app.use(validateRequestHandler(filePath)); // Define your routes app.post("/api/login", (req, res) => { res.send("Login successful!"); }); app.post("/api/register", (req, res) => { res.send("Registration successful!"); }); // Start the server app.listen(3000, () => { console.log("Server is running on port 3000"); }); ``` ### Error Handling The middleware handles errors as follows: #### Application Crashes: The application will crash in these scenarios: 1. The schema file is **not found**. 2. The schema object is **not exported** correctly (e.g., `module.exports = { schema }` is missing). 3. The schema does not **follow the required format**. #### API-Level Errors: The middleware will respond with an error message in these cases: 1. The **API route** is not defined in the schema file. 2. The **request body** does not comply with the validation rules (e.g., missing required fields, incorrect data types). Error responses will be in the following format: ```json { "error": true, "message": "<specific error message>" } ``` ### Notes: 1. Place the middleware **before all routes** to ensure requests are validated before hitting the route handlers. 2. Define the schema accurately for all APIs in your application to avoid validation errors. ## Contributing Contributions are welcome! If you encounter any issues or have suggestions for improvement, feel free to create an issue or submit a pull request. ## License Apache-2.0