decorate-it
Decorate-it is a simple library for validation and logging.
It depends on joi (validator) and bunyan (logger)
Installation
npm i --save decorate-it
Sample usage
file services/CalcService.js
;; { return a + b;} addsync = true;addschema = a: Joi b: Joi; // create your serviceconst CalcService = add; // decorate it, it will mutate CalcService; ;
use service
; CalcService; // returns 4CalcService; // returns 11, input parameters are converted to number typesCalcService; // logs and throws an error
See example under example/example1.js
. Run it using npm run example1
.
Async sample usage
file services/UserService.js
;; { if id === 1 return await { ; }; throw 'User not found';}getUsersync = false; // optional, false by defaultgetUserparams = 'id';getUserschema = id: Joi; // create your serviceconst UserService = getUser; // decorate it, it will mutate UserService; ;
use service
; await UserService; // returns { id: 1, username: 'john' }await UserService; // throws 'User not found'
See example under example/example2.js
. Run it using npm run example2
.
NOTE parameter names cannot be automatically retrieved from async
methods.
You must define them explicitly in params
property like this getUser.params = ['id'];
Removing security information
By default properties password
, token
, accessToken
are removed from logging.
Additionally you can define removeOutput = true
to remove the method result.
Example:
file services/SecurityService.js
;; { return 'ba817ef716'; // hash password here} hashPasswordremoveOutput = true;hashPasswordschema = password: Joi; // create your serviceconst SecurityService = hashPassword; // decorate it, it will mutate SecurityService; ;
use service
; SecurityService;
See example under example/example3.js
. Run it using npm run example3
.
Configuration
import decorate from 'decorate-it';
decorate.configure({
removeFields: Array<String>, // the array of fields not won't be logged to the console, default: ['password', 'token', 'accessToken'],
debug: true/false, // the flag is parameter/ouput logging is enabled, (errors are always enabled), default: true
depth: number, // the object depth level when serializing, default: 4
maxArrayLength: number, // the maximum number of elements to include when formatting an array, default: 30
})
You must configure it, before creating any service.
Special properties
if the parameter name is req
it's assumed that the object is an express request.
Only properties are logged: method
, url
, headers
, remoteAddress
, remotePort
.
if the parameter name is res
it's assumed that the object is an express response.
Only properties are logged: statusCode
, header
.
MIT License
Copyright (c) 2016 Łukasz Sentkiewicz