1
0

Global middleware

This commit is contained in:
2022-03-18 19:37:43 +01:00
parent 6e6a771c1a
commit 93d4590528
3 changed files with 51 additions and 4 deletions

View File

@@ -27,9 +27,17 @@ const router = new Router()
// Enabling buildin CORS support // Enabling buildin CORS support
router.cors() router.cors()
// Register global middleware
router.use((req, res, next) => {
res.headers = {
...res.headers,
'X-Global-Middlewares': 'true'
}
next()
})
// Simple get // Simple get
router.get('/user', (req, res) => { router.get('/user', (req, res) => {
res.body = { res.body = {
data: { data: {
id: 1, id: 1,
@@ -89,6 +97,15 @@ Enable or disable debug mode. Which will return the `error.stack` in case of an
State is a `boolean` which determines if debug mode should be enabled or not (default: `true`) State is a `boolean` which determines if debug mode should be enabled or not (default: `true`)
### `router.use(handler)
Register a global middleware handler.
#### `handler` (function)
Handler is a `function` which will be called for every request.
### `router.cors([config])` ### `router.cors([config])`
If enabled will overwrite other `OPTIONS` requests. If enabled will overwrite other `OPTIONS` requests.

16
index.d.ts vendored
View File

@@ -14,6 +14,13 @@ declare class Router {
* @type {Route[]} * @type {Route[]}
*/ */
protected routes: Route[] protected routes: Route[]
/**
* Global Handlers
*
* @protected
* @type {Handler[]}
*/
protected globalHandlers: Handler[]
/** /**
* Debug Mode * Debug Mode
* *
@@ -70,6 +77,13 @@ declare class Router {
* @param {Response} response * @param {Response} response
* @param {next} next * @param {next} next
*/ */
/**
* Register global handler
*
* @param {RouterHandler} handler
* @param handlers
*/
use(handler: RouterHandler): Router
/** /**
* Register CONNECT route * Register CONNECT route
* *
@@ -303,7 +317,7 @@ type RouterResponse = {
/** /**
* Object you can set response headers in * Object you can set response headers in
*/ */
headers: Headers headers: Object<string, string>
/** /**
* Return status code (default: `204`) * Return status code (default: `204`)
*/ */

View File

@@ -16,6 +16,11 @@ class Router {
*/ */
this.routes = [] this.routes = []
/**
* Global Handlers
*/
this.globalHandlers = []
/** /**
* Debug Mode * Debug Mode
* *
@@ -80,6 +85,16 @@ class Router {
* @param {RouterNext} next * @param {RouterNext} next
*/ */
/**
* Register global handler
*
* @param {RouterHandler} handler
*/
use(handlers) {
this.globalHandlers.push(handlers)
return this
}
/** /**
* Register CONNECT route * Register CONNECT route
* *
@@ -355,13 +370,14 @@ class Router {
'Access-Control-Max-Age': this.corsConfig.maxAge, 'Access-Control-Max-Age': this.corsConfig.maxAge,
} }
} }
const handlers = [...this.globalHandlers, ...route.handlers]
let prevIndex = -1 let prevIndex = -1
const runner = async index => { const runner = async index => {
if (index === prevIndex) if (index === prevIndex)
throw new Error('next() called multiple times') throw new Error('next() called multiple times')
prevIndex = index prevIndex = index
if (typeof route.handlers[index] === 'function') if (typeof handlers[index] === 'function')
await route.handlers[index](req, res, async () => await runner(index + 1)) await handlers[index](req, res, async () => await runner(index + 1))
} }
await runner(0) await runner(0)
if (typeof res.body === 'object') { if (typeof res.body === 'object') {