Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/iamlizu/req-valida
A strict express request validator middleware.
https://github.com/iamlizu/req-valida
express express-middleware expressjs hacktoberfest validate validation validator
Last synced: 22 days ago
JSON representation
A strict express request validator middleware.
- Host: GitHub
- URL: https://github.com/iamlizu/req-valida
- Owner: IamLizu
- Created: 2022-11-27T04:07:24.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-09-10T12:43:00.000Z (2 months ago)
- Last Synced: 2024-09-11T15:08:51.174Z (2 months ago)
- Topics: express, express-middleware, expressjs, hacktoberfest, validate, validation, validator
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/req-valida
- Size: 150 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# req-valida
A strict express request validator middleware, used for ensuring the payload meets the requirement of an endpoint.
Whether `amount` is required in `request.body` or `customerID` in `request.params`, `req-valida` can handle everything. As a strict validator, `req-valida` throws error for any field present in request that is not expected for an endpoint.
> _valida_ is a Romanian verb, which means **validate** in English language.
`req-valida` enables the strict type-checking for request payloads even in Javascript projects. With the extra validation available via the `rules` (see bellow in `data` section), `req-valida` can be a single tool for all sorts of payload validation.
## Installation
```
npm install req-valida
```or
```
yarn add req-valida
```## Usage
For `cjs`,
```js
const { validate } = require("req-valida");
```For `esm`,
```js
import { validate } from "req-valida";
````validate` method takes an object of which looks like,
```js
// regex is required here to be used in rules{
location: "body",
data: {
amount: {
rules: ["number", regex.number],
},
customerID: {
rules: ["string"],
isOptional: true,
},
},
}
```### `location`
`location` can be `body` | `query` | `params`. The `validate` method will use `location` to look for required `data` on each invocation.
### `data`
`data` object should be defined as how the payload is expected for that endpoint. However, each key in `data` object must have `rules` array. First element on `rules` array is the expected type of the key (in string format). Such as, in above example, `amount` is required in the body of some endpoint, and `amount` must be a `number`.
Second element on the `rules` array is optional [RegEx](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) validation. If provided, `validate` will `test` the value of the `amount` against the RegEx string.
### `isOptional`
After that, there's another optional property `isOptional` which can be sent with the each fields. Such as, in above example, `customerID` is optional in that request, so `isOptional` is sent `true`.
There can be case where every field in request is optional, in that case, instead of sending `isOptional` with the fields, `validate` allows another property outside of `data` called `isOptional` (similar to the fields) for these situation. It will tell `validate` to consider the whole `data` object to be optional.
## Examples
An example router with `validate` from `req-valida`,
```js
// necessary and required lines herepaymentRouter.post(
"/intent",validate({
location: "body",
data: {
amount: {
rules: ["number", regex.number],
},
customerID: {
rules: ["string"],
isOptional: true,
},
},
}),(request, response, next) => Payment.Intent.create(request, response, next)
);// necessary and required lines here
````validate` should be used used on the same endpoint for separate concerns. For example, an endpoint might have something in the `request.params` and something in `request.body`, then it will look like,
```js
// necessary and required lines herecustomerRouter.put(
"/:customerID",validate({
location: "params",
data: {
customerID: {
rules: ["string"],
},
},
}),validate({
location: "body",
data: {
name: {
rules: ["string"],
},
email: {
rules: ["string", regex.email],
},
phone: {
rules: ["string", regex.phone],
},
},
isOptional: true,
}),(request, response, next) => Customer.update(request, response, next)
);// necessary and required lines here
```## Contributing
While this is being used in some projects, `req-valida` has to improve a lot. A few things like unit-test, changelog, contributing guide, and a better README etc. needs to be added.
Even discussing about the `req-valida` in the GitHub repository's discussion is a form of contribution.
All contributions are welcomed. Interested parties are requested to follow the general procedure until the steps are explicitly mentioned here.