diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 0000000..1bfc7ae --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,103 @@ +# Migration Guide + +From `v1.x.x` to `v2.x.x`. + +## Contents + +- [Import / Require](#import--require) +- [Routes](#routes) +- [Fetch](#fetch) + + +## Import / Require + +### Before + +```javascript +const Router = require('@tsndr/cloudflare-worker-router') +``` + + +### After + +```javascript +import Router from '@tsndr/cloudflare-worker-router' +``` + + +## Routes + +Just add curly braces. + + +### Before + +```javascript +// Register global middleware +router.use((req, res, next) => { + res.headers.set('X-Global-Middlewares', 'true') + next() +}) + +// Simple get +router.get('/user', (req, res) => { + res.body = { + data: { + id: 1, + name: 'John Doe' + } + } +}) +``` + + +### After + +
+// Register global middleware
+router.use(({ req, res, next }) => {
+  res.headers.set('X-Global-Middlewares', 'true')
+  next()
+})
+
+// Simple get
+router.get('/user', ({ req, res }) => {
+  res.body = {
+    data: {
+      id: 1,
+      name: 'John Doe'
+    }
+  }
+})
+
+ + +## Fetch / `router.handle()` + +Be aware that with `v2.0.0` the parameters of `router.handle()` changed. + + +### Before + +`router.handle(request, extend = {})` + +```javascript +// Listen Cloudflare Workers Fetch Event +addEventListener('fetch', event => { + event.respondWith(router.handle(event.request)) +}) +``` + + +### After + +`router.handle(env, request, extend = {})` + +
+// Listen Cloudflare Workers Fetch Event
+export default {
+  async fetch(request, env, ctx) {
+    return router.handle(env, request)
+  }
+}
+
\ No newline at end of file diff --git a/README.md b/README.md index 741863f..2d16653 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,11 @@ **USE AT YOUR OWN RISK!** +See [Migration Guide](MIGRATION.md) + --- + 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. @@ -101,6 +104,7 @@ export default { Enable or disable debug mode. Which will return the `error.stack` in case of an exception instead of and empty `500` response. Debug mode is disabled by default. + #### `state` State is a `boolean` which determines if debug mode should be enabled or not (default: `true`) @@ -109,6 +113,7 @@ State is a `boolean` which determines if debug mode should be enabled or not (de Register a global middleware handler. + #### `handler` (function) Handler is a `function` which will be called for every request. @@ -118,6 +123,7 @@ Handler is a `function` which will be called for every request. If enabled will overwrite other `OPTIONS` requests. + #### `config` (object, optional) Key | Type | Default Value @@ -145,6 +151,7 @@ Key | Type | Default Value The URL starting with a `/`. Supports the use of dynamic parameters, prefixed with a `:` (i.e. `/user/:userId/edit`) which will be available through the [`req`-Object](#req-object) (i.e. `req.params.userId`). + #### `handlers` (function, optional) An unlimited number of functions getting [`req`](#req-object) and [`res`](#res-object) passed into them. @@ -212,4 +219,4 @@ If you already have a wrangler project you can install the router like this: ``` npm i @tsndr/cloudflare-worker-router@pre -``` +``` \ No newline at end of file