1.7.1 • Published 5 years ago

sails-hook-req-validate-promise v1.7.1

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

DEPRECATION NOTICE

sails-hook-req-validate-promise

Please use 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 package.



Sails hook for overwrite req.validate request with Promise.

Non-Promise version: https://www.npmjs.com/package/sails-hook-req-validate

  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)

  const params = await req.validate(['fruit', ['string', {default: 'apple'}]); // if 'fruit' doesn't exists, it will be set as 'apple'
  console.log(params);
  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

  const params = await req.validate('fruit', {enum: ['apple', 'organe', 'bannana']});
  console.log(params);
  const params = await req.validate([
    {'fruit', {enum: ['apple', 'organe', 'bannana']}},
    {'username?', 'string' },
    {'nickname?', 'any' }   // any type
  ]);
  console.log(params);
  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.

  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

  req.validate('id');
    .then(params => {  
      console.log(params);   // {id: '1234'} 
    })
    .catch(err => {
      console.error(err);
    });

Disable req.badRequest on error and enable Promise.reject

  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.

  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.

  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.

  const params = await req.validate([
    {'id' : 'numeric'},
    {'firstname' : 'string'}, 
    {'lastname' : 'string'}
		]);
  console.log(params);   // {id: '1234', firstname: "John", lastname: "Doe"}

See 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.

  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'}
    );```
<br>


### 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 and 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.

  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 and Conversion Filters for more information.

Disable Default Error Response

When the validation fails, res.badRequest will not be sent instead 'false' will be returned.

  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.

Validation Filters

  any
  email
  url
  ip
  alpha
  numeric
  base64
  hex
  hexColor
  lowercase
  uppercase
  string
  boolean
  int
  float
  date
  json
  array
  object
  ascii
  mongoId
  alphanumeric
  creditCard

Conversion Filters

  toLowercase
  toUppercase
  toEmail         // Normalize email string 
  toBoolean
  toDate
  toInt
  toFloat
1.7.1

5 years ago

1.7.0

5 years ago

1.6.1

5 years ago

1.6.0

5 years ago

1.5.2

5 years ago

1.5.1

5 years ago

1.5.0

5 years ago

1.4.5

5 years ago

1.4.4

5 years ago

1.4.3

5 years ago

1.4.2

5 years ago

1.4.1

5 years ago

1.4.0

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.2

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago