https://github.com/johnkimdev/sails-hook-req-validate-promise
Promise wrapper of https://github.com/JohnKimDev/sails-hook-req-validate
https://github.com/johnkimdev/sails-hook-req-validate-promise
Last synced: about 1 year ago
JSON representation
Promise wrapper of https://github.com/JohnKimDev/sails-hook-req-validate
- Host: GitHub
- URL: https://github.com/johnkimdev/sails-hook-req-validate-promise
- Owner: JohnKimDev
- License: mit
- Created: 2018-01-28T00:27:51.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-01-15T19:15:44.000Z (over 7 years ago)
- Last Synced: 2024-04-26T00:42:30.933Z (about 2 years ago)
- Language: JavaScript
- Size: 42 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# [DEPRECATION NOTICE]
## sails-hook-req-validate-promise
## Please use [sails-hook-req-validate](https://www.npmjs.com/package/sails-hook-req-validate) for the updated version! There is a brand new version that supports both PROMISE and Non-PROMISE versions with many new features.
I will no longer support this package but I will continue to update the [sails-hook-req-validate](https://www.npmjs.com/package/sails-hook-req-validate) package.
---
---
Sails hook for overwrite req.validate request with Promise.
Non-Promise version: https://www.npmjs.com/package/sails-hook-req-validate
```javascript
npm install sails-hook-req-validate-promise --save
```
### req.validate();
> ##### Requirements:
Sails v1.x.x and lodash enabled as global (lodash is enabled by default).
---
### Default Value (when a parameter is not set)
```javascript
const params = await req.validate(['fruit', ['string', {default: 'apple'}]); // if 'fruit' doesn't exists, it will be set as 'apple'
console.log(params);
```
```javascript
const params = await req.validate([
{'fruit', {enum: ['apple', 'organe', 'bannana'], default: 'apple'}}, // also can be used with enum
{'username?', 'string' }
]);
console.log(params);
```
---
### Enumeration check
```javascript
const params = await req.validate('fruit', {enum: ['apple', 'organe', 'bannana']});
console.log(params);
```
```javascript
const params = await req.validate([
{'fruit', {enum: ['apple', 'organe', 'bannana']}},
{'username?', 'string' },
{'nickname?', 'any' } // any type
]);
console.log(params);
```
```javascript
const params = await req.validate([
{'fruit', ['string', {enum: ['apple', 'organe', 'bannana']}]},
{'username?', 'string' }
]);
console.log(params);
```
---
### Simple Single & Multple Parameter(s)
Validates `req.params` for expecting parameter keys and returns `req.badRequest` (400 status code) if any parameter key is missing.
```javascript
try {
const params = await req.validate('id');
console.log(params); // {id: '1234'}
// if the validation fails, "req.badRequest" will be called and returns Promise.reject
} catch (err) {
// wil catch Promise.reject here.
}
```
If you prefer non async-await promise method
```javascript
req.validate('id');
.then(params => {
console.log(params); // {id: '1234'}
})
.catch(err => {
console.error(err);
});
```
Disable `req.badRequest` on error and enable `Promise.reject`
```javascript
const params = await req.validate('id', false); // <--- if you set the second value as FALSE, req.badRequest will NOT be call when error but it will just return Promise.reject
```
NOTE: To disable the default error response, set `false` as the second passing variable.
```javascript
const params = await req.validate(['id', 'firstname', 'lastname']);
console.log(params); // {id: '1234', firstname: "John", lastname: "Doe"}
// if the validation fails, "req.badRequest" will be called and returns Promise.reject
```
### Optional Parameter
Validates `req.params` for expecting parameter keys and returns `req.badRequest` (400 status code) if any parameter key is missing except optional parameters.
```javascript
const params = await req.validate(['id', 'firstname', 'lastname?']); // lastname is an OPTIONAL field
console.log(params); // {id: '1234', firstname: "John", lastname: "Doe"}
// if the validation fails, "req.badRequest" will be called and returns Promise.reject
```
NOTE: For an optional parameter, just add `?` at the end of the passing parameter key.
### Multple Parameters with TYPE filters
Validates `req.params` for expecting parameter keys and returns `req.badRequest` (400 status code) if any missing parameter key.
```javascript
const params = await req.validate([
{'id' : 'numeric'},
{'firstname' : 'string'},
{'lastname' : 'string'}
]);
console.log(params); // {id: '1234', firstname: "John", lastname: "Doe"}
```
See [Validation Filters](#validation_filters) for more information.
### OR Operation
OR `|` operarion is a new addition to 0.2.x version. It can be applied to either *required* or *optional* parameter.
```javascript
const params = await rreq.validate(
{'id': 'string | numeric'}, // 'numeric | string', 'numeric|string' or 'numeric| string' are OK. Space will be ignored
{'usernameOrEmail': 'string | numeric | email'}
);```
### Multple Parameters with TYPE filters & CONVERTION filters
Validates `req.params` for expecting parameter keys and returns `req.badRequest` (400 status code) if any missing parameter key.
```javascript
const params = await rreq.validate([
{'id' : 'numeric'},
{'firstname' : ['string', 'toUppercase']},
{'lastname' : ['string', 'toLowercase']}
]);
console.log(params); // {id: '1234', firstname: "John", lastname: "Doe"}
```
NOTE: All CONVERTION filters start with `to`, for example: toUppercase, toBoolean.
See [Validation Filters](#validation_filters) and [Conversion Filters](#conversion_filters) for more information.
### - Additional Example (Combining All Above Examples in One)
Validates `req.params` for expecting parameter keys and returns `req.badRequest` (400 status code) if any missing parameter key.
```javascript
const params = await req.validate([
{'id' : 'numeric'}, // (required) 'id' param as NUMERIC type
'phone?', // (optional) 'phone' as ANY type
{'website?': 'url'}, // (optional) 'website' as URL type
{'firstname' : ['string', 'toUppercase']}, // (required) 'firstname' as STRING type and convert to UPPERCASE
{'department' : ['string', 'lowercase']} // (required) 'department' as STRING type and must be LOWERCASE input
]);
console.log(params); // {id: '1234', firstname: "John", lastname: "Doe"}
// if the validation fails, "req.badRequest" will be called and will NOT returns Promise.reject
```
See [Validation Filters](#validation_filters) and [Conversion Filters](#conversion_filters) for more information.
### Disable Default Error Response
When the validation fails, `res.badRequest` will not be sent instead 'false' will be returned.
```javascript
try {
const params = await req.validate(
['id', 'firstname', 'lastname?'], // lastname is an OPTIONAL field
false // <--- if you set the second value as FALSE, req.badRequest will NOT be call "res.badRequest" response when error but it will return Promise.reject
);
console.log(params); // {id: '1234', firstname: "John", lastname: "Doe"}
// ..process
} catch (err) {
console.error(err);
return res.badRequest(); // Make sure to handle badRequest response
}
```
NOTE: To disable the default error response, set `false` as the second passing variable.
```javascript
any
email
url
ip
alpha
numeric
base64
hex
hexColor
lowercase
uppercase
string
boolean
int
float
date
json
array
object
ascii
mongoId
alphanumeric
creditCard
```
```javascript
toLowercase
toUppercase
toEmail // Normalize email string
toBoolean
toDate
toInt
toFloat
```