Create branch
This commit is contained in:
14
README.md
14
README.md
@@ -1,14 +1,16 @@
|
||||
# Cloudflare Workers Router
|
||||
|
||||
Cloudflare Workers Router is a super lightweight router (3.6 kB) with middleware support and ZERO dependencies for Cloudflare Workers, inspired by the [Express.js](https://expressjs.com/) syntax.
|
||||
---
|
||||
**PRE-RELEASE: This branch is only for use with [wrangler2](https://github.com/cloudflare/wrangler2)!**
|
||||
|
||||
---
|
||||
|
||||
Cloudflare Workers Router is a super lightweight router (3.6 kB) with middleware support and ZERO dependencies for Cloudflare Workers.
|
||||
|
||||
When I was trying out Cloudflare Workers I almost immediately noticed how fast it was compared to other serverless offerings. So I wanted to build a full-fledged API to see how it performs doing real work, but since I wasn't able to find a router that suited my needs I created my own.
|
||||
|
||||
I worked a lot with [Express.js](https://expressjs.com/) in the past and really enjoyed their middleware approach, but since none of the available Cloudflare Worker routers offered middleware support at the time, I felt the need to create this router.
|
||||
|
||||
Attention: It's not directly compatible with [Express.js](https://expressjs.com/), it only follows the same approach.
|
||||
|
||||
|
||||
## Contents
|
||||
|
||||
- [Usage](#usage)
|
||||
@@ -161,9 +163,9 @@ Key | Type | Description
|
||||
|
||||
## Setup
|
||||
|
||||
### Wrangler
|
||||
### Wrangler2
|
||||
|
||||
You can use [wrangler](https://github.com/cloudflare/wrangler) to generate a new Cloudflare Workers project based on this router by running the following command from your terminal:
|
||||
You can use [wrangler2](https://github.com/cloudflare/wrangler2) to generate a new Cloudflare Workers project based on this router by running the following command from your terminal:
|
||||
|
||||
```
|
||||
wrangler generate myapp https://github.com/tsndr/cloudflare-worker-router-template
|
||||
|
||||
45
index.d.ts
vendored
45
index.d.ts
vendored
@@ -43,6 +43,16 @@ declare class Router {
|
||||
* @property {string} url URL String
|
||||
* @property {RouterHandler[]} handlers Array of handler functions
|
||||
*/
|
||||
|
||||
/**
|
||||
* Router Context
|
||||
*
|
||||
* @typedef RouterContext
|
||||
* @property {Object<string, string>} env Environment
|
||||
* @property {RouterRequest} req Request Object
|
||||
* @property {RouterResponse} res Response Object
|
||||
* @property {RouterNext} next Next Handler
|
||||
*/
|
||||
/**
|
||||
* Request Object
|
||||
*
|
||||
@@ -73,9 +83,7 @@ declare class Router {
|
||||
* Handler Function
|
||||
*
|
||||
* @callback RouterHandler
|
||||
* @param {Request} request
|
||||
* @param {Response} response
|
||||
* @param {next} next
|
||||
* @param {RouterContext} ctx
|
||||
*/
|
||||
/**
|
||||
* Register global handler
|
||||
@@ -217,11 +225,12 @@ declare class Router {
|
||||
/**
|
||||
* Handle requests
|
||||
*
|
||||
* @param {any} env
|
||||
* @param {Request} request
|
||||
* @param {any=} extend
|
||||
* @returns {Response}
|
||||
*/
|
||||
handle(request: Request, extend?: any): Response
|
||||
handle(env: any, request: Request, extend?: any): Response
|
||||
}
|
||||
declare namespace Router {
|
||||
export { Route, RouterRequest, RouterResponse, RouterNext, RouterHandler, RouterCorsConfig }
|
||||
@@ -271,7 +280,33 @@ type RouterCorsConfig = {
|
||||
/**
|
||||
* Handler Function
|
||||
*/
|
||||
type RouterHandler = (req: RouterRequest, res: RouterResponse, next: RouterNext) => any
|
||||
type RouterHandler = (ctx: RouterContext) => any
|
||||
|
||||
/**
|
||||
* Router Context
|
||||
*/
|
||||
type RouterContext = {
|
||||
/**
|
||||
* Environment
|
||||
*/
|
||||
env: Object<string, string>
|
||||
|
||||
/**
|
||||
* Request Object
|
||||
*/
|
||||
req: RouterRequest
|
||||
|
||||
/**
|
||||
* Response Object
|
||||
*/
|
||||
res: RouterResponse
|
||||
|
||||
/**
|
||||
* Next Handler
|
||||
*/
|
||||
next: RouterNext
|
||||
}
|
||||
|
||||
/**
|
||||
* Request Object
|
||||
*/
|
||||
|
||||
19
index.js
19
index.js
@@ -47,6 +47,16 @@ class Router {
|
||||
* @property {RouterHandler[]} handlers Array of handler functions
|
||||
*/
|
||||
|
||||
/**
|
||||
* Router Context
|
||||
*
|
||||
* @typedef RouterContext
|
||||
* @property {Object<string, string>} env Environment
|
||||
* @property {RouterRequest} req Request Object
|
||||
* @property {RouterResponse} res Response Object
|
||||
* @property {RouterNext} next Next Handler
|
||||
*/
|
||||
|
||||
/**
|
||||
* Request Object
|
||||
*
|
||||
@@ -80,9 +90,7 @@ class Router {
|
||||
* Handler Function
|
||||
*
|
||||
* @callback RouterHandler
|
||||
* @param {RouterRequest} request
|
||||
* @param {RouterResponse} response
|
||||
* @param {RouterNext} next
|
||||
* @param {RouterContext} ctx
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -308,11 +316,12 @@ class Router {
|
||||
/**
|
||||
* Handle requests
|
||||
*
|
||||
* @param {any} env
|
||||
* @param {Request} request
|
||||
* @param {any=} extend
|
||||
* @returns {Response}
|
||||
*/
|
||||
async handle(request, extend = {}) {
|
||||
async handle(env, request, extend = {}) {
|
||||
try {
|
||||
if (request instanceof Event) {
|
||||
request = request.request
|
||||
@@ -373,7 +382,7 @@ class Router {
|
||||
throw new Error('next() called multiple times')
|
||||
prevIndex = index
|
||||
if (typeof handlers[index] === 'function')
|
||||
await handlers[index](req, res, async () => await runner(index + 1))
|
||||
await handlers[index]({ env, req, res, next: async () => await runner(index + 1) })
|
||||
}
|
||||
await runner(0)
|
||||
if (typeof res.body === 'object') {
|
||||
|
||||
Reference in New Issue
Block a user