@huz-com/middleware-core v1.0.13
Huz.Com > Component > Middleware Core
helmet, cors, body, cookie, header, query, default endpoints and most-used middlewares
Standards
- Language:
TS - Eslint:
Yes - Static Code Analysis:
YesIntelliJ Code Inspections - DDD - Document Driven:
Yes - EDD - Exception Driven:
Yes - TDD - Test Driven:
Yesgo to test folder - Standards Complied: Huz Standards
Commands
npm run clear// clears "dist" foldernpm run lint// runs eslint for static code analysisnpm run test// runs test files in "test" foldernpm run build// builds JS files at "dist" foldernpm publishornpm run publix// publishes "dist" folder to npm
Install
npm i @huz-com/middleware-core
Sample - Easy
const {MiddlewareCore} = require('@huz-com/middleware-core');
// ES6: import {middlewareCore} from "@huz-com/middleware-core";
const app = express();
const middlewareCore = MiddlewareCore.with(app);
middlewareCore.initDefaultHandlers();
/*
it calls:
.helmet().cors().urlEncode() // for security
.json().cookie().queryString().toHeader().requestCustom() // for formatting
.readiness().liveness().status() // for default endpoints
.count() // processors (call counter)
;
*/
// ...................................................
// Your custom codes (other middlewareCores, other routes)
// ...................................................
middlewareCore.finalDefaultHandlers();
/*
it calls:
empty().notFound().generalError() // for error handling
;
*/ Sample - Detailed
const {MiddlewareCore, ProcessExitType} = require('@huz-com/middleware-core');
// ES6: import {middlewareCore} from "@huz-com/middleware-core";
const app = express();
const middlewareCore = MiddlewareCore.with(app);
//initializer functions
middlewareCore
.helmet() // (options), def: null, ie: ##helmet
.cors() // (options), def: null, ie: ##cors
.urlEncode() // (options), def: { extended: false }, ##body-parser
.json() // (options), def: null, ##body-parser
.cookie() // (secret, options), ie: ##cookie-parser
.queryString() // (options), def: {depth: 12}, ##qs
.toHeader() // (options), def: {prefix: '__'}
.requestCustom() // (value), def: {}
.readiness((req) => null) // if success callback should return null, else error message
.liveness((req) => null) // // if success callback should return null, else error message
.status() // (path: string), def: status
.count() // counts endpoint calls
// other middlewares
// calculates endpoint duration
.duration((req, path, msec) => console.log(`>> ${path} consumes ${msec}`)) // it takes async function to process duration
// catches all method:options calls
.corsOptions() // (path, options), def: ('*', null) ie: ##cors
;
// ...................................................
// Your custom codes (other middlewareCores, other routes)
// ...................................................
//finalizer functions
middlewareCore
.empty() // Throws when empty endpoint or route
.notFound() // (...ignoredPaths: Array<string>) you can give ignored paths like ('c-panel', 'admin')
.generalError() // Throws when unhandled error
.onExit({ // triggers on exit, you can set events which you need
beforeExit: (type, ...args) => {}, // triggers before exit
afterExit: (type, ...args) => {}, // triggers after exit (after below)
uncaughtException: (type, ...args) => {}, // when error
exit: (type, ...args) => {}, // any exit
SIGINT: (type, ...args) => {}, // ctrl+c event or normally exit
SIGUSR1: (type, ...args) => {}, // kill process
SIGUSR2: (type, ...args) => {}, // kill process
SIGTERM: (type, ...args) => {}, // administratively terminate a process
SIGQUIT: (type, ...args) => {}, // kill process with dumps core
})
;Dependency
middlewareCore.helmet
Initializeradd before your custom routers or middlewareCoresNpm Packagehelmet
It enables small security middlewareCores
- contentSecurityPolicy: CSP: Content Security Policy by Mozilla
- sets Content-Security-Policy
- sets Content-Security-Policy-Report-Only
- dnsPrefetchControl: X-DNS-Prefetch-Control by Mozilla
- expectCt: Expect-CT by Mozilla
- frameGuard: X-Frame-Options by Mozilla
- hidePoweredBy: X-Powered-By by Mozilla
- hsts: HSTS: HTTP Strict Transport Security by Mozilla
- ieNoOpen: X-Download-Options by NWebsec
- noSniff: X-Content-Type-Options by Mozilla
- permittedCrossDomainPolicies: X-Permitted-Cross-Domain-Policies by OWASP
- referrerPolicy: Referrer-Policy by Mozilla
- xssFilter: XSS: Cross-Site Scripting by OWASP
middlewareCore.cors
Initializeradd before your custom routers or middlewareCoresNpm Packagecors
It enables that CORS (Cross-Origin Resource Sharing)
middlewareCore.cookie
Initializeradd before your custom routers or middlewareCoresNpm Packagecookie-parser
Parse "Cookie" header and populate req.cookies with an object keyed by the cookie names
middlewareCore.urlEncode
Initializeradd before your custom routers or middlewareCoresNpm Packagebody-parser
it parses if content-type is application/x-www-form-urlencoded
middlewareCore.json
Initializeradd before your custom routers or middlewareCoresNpm Packagebody-parser
it parses if content-type is application/json
middlewareCore.queryString
Initializeradd before your custom routers or middlewareCoresNpm Packageqs
it parses query string and converts it to json object
Sample: foobar=baz ===> {foo: {bar: 'baz'}}
middlewareCore.readiness
Initializeradd before your custom routers or middlewareCoresTutorialKubernetes
Creates an endpoint for Kubernetes readinessProbe
middlewareCore.liveness
Initializeradd before your custom routers or middlewareCoresTutorialKubernetes
Creates an endpoint for Kubernetes livenessProbe
middlewareCore.toHeader
Initializeradd before your custom routers or middlewareCoresCustom solution for Huz
It parses query string and moves some keys to headers
Sample: ?silent=true&token=foo-bar ==> {silent: true, token: 'foo-bar'}
middlewareCore.duration
Initializeradd before your custom routers or middlewareCoresCustom solution for Huz
It calculates consumed time by called endpoint
middlewareCore.empty
Finalizeradd after your custom routers or middlewareCoresCustom solution for Huz
Handles empty endpoint and throws an error
app.get('/', (req, res) => {...});
middlewareCore.notFound
Finalizeradd after your custom routers or middlewareCoresCustom solution for Huz
Handles not-found endpoint and throws an error
app.use((req, res) => {...});
middlewareCore.generalError
Finalizeradd after your custom routers or middlewareCoresCustom solution for Huz
Handles any unknown error and throws an error
app.use((e, req, res, next) => {...});